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.
Wyzwanie
ŚredniKlasa 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()
}
}
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Wprowadzenie do SwiftUI
10Projekt – Kawiarnia Coddy
Przegląd projektuEkrany napojów2Wyświetlanie treści
Widoki tekstoweLiczby w tekścieCzcionkiKolorySF SymbolsPodsumowanie — metka z ceną5Stan i przyciski
PrzyciskiWłaściwość @StateStan prawda lub fałszWidoki warunkowePodsumowanie — licznik punktów6Dane wejściowe użytkownika
Pole tekstowePrzełącznikPrzyciski krokowe i suwakSelektorPodsumowanie – formularz zamówienia9Udostępnianie danych
Właściwość @BindingObiekty obserwowalneObiekty środowiskowePodsumowanie — licznik krokówPoćwicz samodzielnie: Edytor online SwiftUI