Passare dati tra view in SwiftUI

Mattepuffo's logo
Passare dati tra view in SwiftUI

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!


Condividi

Commentami!