Menu
Coddy logo textTech

Oggetti osservabili

Fa parte della sezione Introduzione a SwiftUI del percorso Swift di Coddy. Lezione 40 di 50.

I dati condivisi da più viste, o che hanno una propria logica, vanno inseriti in una classe. Questa si conforma a ObservableObject e ogni proprietà visualizzata sullo schermo è contrassegnata con @Published:

class Cart: ObservableObject {
    @Published var count = 0

    func add() {
        count += 1
    }
}

La vista che crea l'oggetto lo memorizza con @StateObject. SwiftUI mantiene vivo quell'oggetto mentre la vista è sullo schermo e ridisegna la vista ogni volta che una proprietà pubblicata cambia:

struct ContentView: View {
    @StateObject private var cart = Cart()

    var body: some View {
        VStack {
            Text("Items: \(cart.count)")
            Button("Add to cart") {
                cart.add()
            }
        }
    }
}

Una vista figlia che riceve un oggetto esistente dal suo genitore lo contrassegna invece con @ObservedObject: osserva l’oggetto, ma non ne è proprietaria.

challenge icon

Sfida

Medio

La classe Scoreboard non è collegata allo schermo. Rendila un ObservableObject con @Published points, conservala in ContentView con @StateObject e fai in modo che il pulsante chiami scoreboard.score(). Il testo deve essere Points: 10 dopo un tocco.

Provalo tu

import SwiftUI

@main
struct CoddyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Introduzione a SwiftUI

Esercitati da solo: Playground SwiftUI