Skip to content

在视图中接收模型对象

现在我们已经创建了 ModelData 对象,我们需要更新视图来将 ModelData 对象用作 app 的数据存储。

第 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,并打开实时预览,验证功能是否正常。

在视图中接收模型对象 has loaded