Ποια είναι η διαφορά μεταξύ των κλάσεων StateObject και ObservableObject στο πλαίσιο της διαχείρισης κατάστασης;
sobes.tech AI
Απάντηση από AI
Στο SwiftUI, τα ObservableObject και StateObject σχετίζονται με τη διαχείριση της κατάστασης, αλλά εκτελούν διαφορετικούς ρόλους:
-
ObservableObject: είναι ένα πρωτόκολλο που πρέπει να υλοποιήσει μια κλάση ώστε οι αλλαγές της να μπορούν να παρακολουθούνται στο SwiftUI. Η κλάση που συμμορφώνεται με αυτό το πρωτόκολλο δημοσιεύει αλλαγές μέσω της ιδιότητας
@Published. -
StateObject: είναι μια ιδιότητα-περιτύλιγμα που χρησιμοποιείται σε προβολές για τη δημιουργία και αποθήκευση μιας στιγμιότυπου μιας κλάσης που συμμορφώνεται με το
ObservableObject. Διασφαλίζει ότι το αντικείμενο θα δημιουργηθεί μόνο μία φορά και θα διατηρηθεί κατά τις ενημερώσεις της προβολής.
Παράδειγμα:
class ViewModel: ObservableObject {
@Published var count = 0
}
struct ContentView: View {
@StateObject private var viewModel = ViewModel()
var body: some View {
VStack {
Text("Count: \(viewModel.count)")
Button("Increment") {
viewModel.count += 1
}
}
}
}
Εδώ, το ViewModel είναι μια κλάση με κατάσταση, και το @StateObject στο ContentView είναι υπεύθυνο για τη δημιουργία και την αποθήκευσή του.