@StateObject
╱🚧 under construction
SwiftUI ⟩ view ⟩ state ⟩ object ⟩ @StateObject
Use @StateObject to declare and initialize a state object in a view that observes the object's data.
// ⭐️ 1. declare a type that conforms to `ObservableObject`
class Zoo : ObservableObject {
// ⭐️ 2. declare published value(s) in this type
@Published var creatures = [
Creature(name: "Gorilla", emoji: "🦍"),
Creature(name: "Peacock", emoji: "🦚"),
]
}
// content view
struct ContentView: View {
// ⭐️ 3. declare & initialize a state object
@StateObject var data = Zoo()
var body: some View {
// 4. access the state object's data in subviews
}
}📗 參考:Swift Playgrounds (Keep Going with Apps) - Sharing Data Between Views.
📁 CreatureZoo
// ⭐️ 1. declare an observable object type
class CreatureZoo : ObservableObject {
// ⭐️ 2. declare published properties
@Published var creatures = [
Creature(name: "Gorilla", emoji: "🦍"),
Creature(name: "Peacock", emoji: "🦚"),
]
}📁 MyApp
@main
struct MyApp: App {
// ⭐️ 3. intialize an observable object
@StateObject var data = CreatureZoo()
var body: some Scene {
WindowGroup {
ContentView()
// ⭐️ 4. put data in environment
.environmentObject(data)
}
}
}📁 ContentView
struct ContentView: View {
// ⭐️ 5. inject data from environment
@EnvironmentObject var data : CreatureZoo
var body: some View {
// ⭐️ 6. access data in subviews
}
}@frozen @propertyWrapper
struct StateObject<ObjectType> where ObjectType : ObservableObjectSwiftUI ⟩
View ⟩ State Modifiers ⟩
StateObject (struct)
ObservedObject (struct)
EnvironmentObject (struct)
Combine ⟩
ObservableObject (protocol)
ObservableObject:declare an observable object type.
@Published:declare a published value in an observable object type.
@StateObject:initialize an observable object.
is property wrapper.
wraps an object that conforms to ObservableObject.
data model:the source of truth of your app.
Last updated
Was this helpful?