Menu
Coddy logo textTech

Beobachtbare Objekte

Teil des Abschnitts Einführung in SwiftUI der Swift-Journey von Coddy. Lektion 40 von 50.

Daten, die mehrere Ansichten gemeinsam nutzen oder die eine eigene Logik haben, gehören in eine Klasse. Sie entspricht ObservableObject, und jede Eigenschaft, die der Bildschirm anzeigt, wird mit @Published gekennzeichnet:

class Cart: ObservableObject {
    @Published var count = 0

    func add() {
        count += 1
    }
}

Die Ansicht, die das Objekt erstellt, speichert es mit @StateObject. SwiftUI hält dieses eine Objekt am Leben, solange die Ansicht auf dem Bildschirm angezeigt wird, und zeichnet die Ansicht neu, wann immer sich eine veröffentlichte Eigenschaft ändert:

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

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

Eine untergeordnete Ansicht, die ein vorhandenes Objekt von ihrer übergeordneten Ansicht erhält, markiert es stattdessen mit @ObservedObject: Sie überwacht das Objekt, besitzt es aber nicht.

challenge icon

Aufgabe

Mittel

Die Klasse Scoreboard ist nicht mit dem Bildschirm verbunden. Mache sie zu einem ObservableObject mit einem @Published-points, speichere sie in ContentView mit @StateObject und sorge dafür, dass die Schaltfläche scoreboard.score() aufruft. Der Text muss nach einem Tippen Points: 10 lauten.

Probier es selbst

import SwiftUI

@main
struct CoddyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Einführung in SwiftUI

Übe selbstständig: Swift-Playground