Menu
Coddy logo textTech

Obiekty obserwowalne

Część sekcji Wprowadzenie do SwiftUI ścieżki Swift w Coddy. Lekcja 40 z 50.

Dane współdzielone przez kilka widoków lub mające własną logikę umieszcza się w klasie. Klasa ta jest zgodna z protokołem ObservableObject, a każda właściwość wyświetlana na ekranie jest oznaczona jako @Published:

class Cart: ObservableObject {
    @Published var count = 0

    func add() {
        count += 1
    }
}

Widok, który tworzy obiekt, przechowuje go za pomocą @StateObject. SwiftUI utrzymuje ten obiekt przy życiu, gdy widok jest widoczny na ekranie, i ponownie rysuje widok za każdym razem, gdy zmienia się opublikowana właściwość:

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

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

Widok podrzędny, który otrzymuje istniejący obiekt od widoku nadrzędnego, oznacza go zamiast tego jako @ObservedObject: obserwuje obiekt, ale nie jest jego właścicielem.

challenge icon

Wyzwanie

Średni

Klasa Scoreboard nie jest połączona z ekranem. Spraw, aby była obiektem ObservableObject z właściwością @Published points, przechowuj ją w ContentView za pomocą @StateObject i spraw, aby przycisk wywoływał scoreboard.score(). Po jednym kliknięciu tekst musi wyświetlać Points: 10.

Spróbuj swoich sił

import SwiftUI

@main
struct CoddyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Wprowadzenie do SwiftUI

Poćwicz samodzielnie: Edytor online SwiftUI