Passare dati tra view in SwiftUI
Una cosa che SwiftUI mi ha finalmente levato di mezzo è la Storyboard e i suoi segue; non li ho mai sopportsti.
Oggi vediamo come richiamare una View e passargli dei dati.
Partiremo da questo articolo, in cui abbiamo riempito la nostra List da JSON.
Prima di tutto create un'altra View del genere:
import SwiftUI
struct BookView: View {
let currentBook: Book;
var body: some View {
VStack {
Text(currentBook.title)
Text(currentBook.isbn)
}
}
}
/*struct BookView_Previews: PreviewProvider {
static var previews: some View {
BookView();
}
}*/
Vi ho lasciato commentato l'ultima parte che viene creata in automatico, ma che non ci serve.
La nostra List diventerà così:
import SwiftUI
struct ContentView: View {
let standard = UINavigationBarAppearance()
@ObservedObject var getBooks = GetBooks();
init() {
standard.configureWithOpaqueBackground()
standard.backgroundColor = .systemGreen
standard.titleTextAttributes = [.foregroundColor: UIColor.white]
UINavigationBar.appearance().standardAppearance = standard
}
var body: some View {
NavigationView {
VStack {
List(getBooks.books) { book in
NavigationLink(destination: BookView(currentBook: book) ) {
Text(book.title)
}
}
}
.navigationBarTitle(Text("Libri"), displayMode: .inline)
.navigationBarItems(trailing:
HStack {
Button(action: {
// Add action
}, label: {
Text("Add")
}).foregroundColor(Color.black)
}
)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView();
}
}
Probabilmente ci stanno parti di codice che non vi interessa; in caso levatele.
Quello che ci interessa è questo:
VStack {
List(getBooks.books) { book in
NavigationLink(destination: BookView(currentBook: book) ) {
Text(book.title)
}
}
}
In pratica l'oggetto NavigationLink, in cui indichiamo la destinazione e il book corrente.
Enjoy!
swift swiftui json list navigationlink view
Commentami!