🅿️ObservableObject
// ⭐️ 1. declare an observable object type
final class ModelData: ObservableObject {
// ⭐️ 2. declare published properties
@Published var landmarks: [Landmark] = load("landmarkData.json")
}
// app
struct LandmarksApp: App {
// ⭐️ 3. initialize an observable object (data model)
@StateObject private var modelData = ModelData()
var body: some Scene {
WindowGroup {
ContentView()
// ⭐️ 4. put the model object in the environment.
// ------------------------------------------------
// any subview can access this model object
// through `@EnvironmentObject` automatically. (see 6.)
.environmentObject(modelData)
}
}
}
// any subview in the view hierarchy
struct LandmarkList: View {
// ⭐️ 5. adopt the model object as an `@EnvironmentObject`
// --------------------------------------------------------
// `modelData` property gets its value AUTOMATICALLY, as long as
// `environmentObject(_:)` modifier has been applied to a parent view.
@EnvironmentObject var modelData: ModelData
var body: some View { ... }
}問題
參考資料
Last updated