外观风格
在视图中接收模型对象
现在我们已经创建了 ModelData
对象,我们需要更新视图来将 ModelData
对象用作 app 的数据存储。
![](https://cdn.konnga.cn/devcursor/swift-ui/03050H@2x.png)
第 1 步
在 LandmarkList.swift
中,为视图添加一个 @EnvironmentObject
属性声明,并为预览添加一个 environmentObject(_:)
修饰符。
只要 environmentalObject(_:)
修饰符被应用于父级,modelData
属性就会自动获取其值。
在上一节教程中,我们调整了
landmarks
的声明位置,此时,LandmarkList.swift
代码会报错,稍后我们会修复错误。
第 2 步
在过滤地标时,使用 modelData.landmarks
作为数据。
第 3 步
更新 LandmarkDetail.swift
视图,来使用环境中的 ModelData
对象。
第 4 步
更新 LandmarkRow.swift
的预览,来使用环境中的 ModelData
对象。
第 5 步
更新 ContentView.swift
的预览,将 ModelData
添加到环境中,这样,任何 ContentView
的子视图都可以使用 ModelData
。
注意
如果 ContentView.swift
没有添加 ModelData
,但任一子视图需要环境中的 ModelData
,则需要在子视图的预览中使用 environmentalObject(_:)
修饰符来引用 ModelData
。
如果你在模拟器或设备上运行应用时,这个更新可以确保在环境中持有 ModelData
对象。
第 6 步
更新 LandmarksApp
以创建一个模型实例,并使用 environmentalObject(_:)
修饰符将其提供给 ContentView
。
使用
@StateObject
为一个属性初始化一个ModelData
,在应用程序的生命周期内只会执行一次。
第 7 步
切换回 LandmarkList.swift
,并打开实时预览,验证功能是否正常。
![](https://cdn.konnga.cn/devcursor/swift-ui/030507.png)