๐ ฟ๏ธObservableObject
Last updated
Was this helpful?
Last updated
Was this helpful?
Was this helpful?
SwiftUI โฉ Data Flow โฉ 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 { ... }
}
An observable object is a custom object (reference type) for your data that can be bound to a view from storage in SwiftUIโs environment.
Use ObservableObject to declare an observable object .
Use to declare in an observable object type.
Use to initialize an observable object.
ๅจ่ท CS193P ๅฐ็ฌฌไธ่ชฒ็ๆๅ๏ผๅฆๆๆ็ ง่ชฒ็จไธ็็จๅผ็ขผๅๅฐไธๅ็็ งๆ๏ผ็จๅผๅฏไปฅๆญฃๅธธๅท่กใ
ไฝๅฆๆๆ
่ชๅฐ Card ้ๅ struct ๆนๆไธๅ
้ตๅพช Identifiable ๅๆไน้ตๅพช Equatable๏ผ้ๆๅฐฑๅบ็พๅ้กไบ๏ผใๅจๆๅก็็ๆๅ๏ผๅก็ไธๆ็ฟป้ขใ๏ผ้ๅ้กไผผไน่ท ForEach(data){ ... } ่ชๆณ่ฃก้ข๏ผdata
้จๅ็ .id ๆ้ไฟใ
ๅฐฑ็ฎ @Published var viewModel ๆดๆฐไบ๏ผไฝๅจ ForEach(viewModel.cards) ่ฃก้ข็ cards ็ id ไธฆๆฒๆ่ฎๆด๏ผๅๅ ไธ Card ๆฌ่บซ้ตๅพช Equatable (้้ปๅพ้่ฆ๏ผๅ ็บๅฆๆๆฒๆ Equatable๏ผ็จๅผๅฏๆญฃๅธธๅท่ก)๏ผ้ ๆ SwiftUI ๅคๆท EmojiMemoryGameView ็ body ่ฃก้ข็ ForEach ้จๅไธ้ๆดๆฐ๏ผๅ ๆญคๅฐฑไธๆ็ฟป้ขไบใ
ๆ Equatable ่ทๆฒๆ Equatable ๆ้บผๅทฎ้ฃ้บผๅคๅข๏ผSwiftUI ๆฏๅฆไฝๅคๆทไธๅ view ๅฐๅบ่ฆไธ่ฆๆดๆฐๅข๏ผ
โฉ โฉ
Swift โฉ Standard Library โฉ โฉ
data model๏ผdata shared with any views in your app.
environment object๏ผan observable object, which is put in the environment by calling an ancester view's .environmentObject(_:) modifier.
SwiftUI โฉ State and Data Flow