我在尝试使用 SwiftUI 的 @EnvironmentObject 包装器理解层次结构时遇到问题。我有一个需要在应用程序内的多个屏幕中访问的 ViewModel,因此我将此代码放在主应用程序文件中:
var chartsModel = ChartsViewModel()
在 Xcode 为新项目生成的 ContentView 文件中,我已将其放在 ContentView_Previews 中
ContentView().environmentObject(ChartsViewModel())
现在让我感到困惑的是,我在 ContentView 内部有一个 2 层的视图,它需要来自 ViewModel 的数据。
ContentView()->HomeView()->ChartView()
ChartView 是 HomeView() 的子项
我可以使用以下代码让 ChartView 在预览模式下显示数据。
@EnvironmentObject var viewModel: ChartsViewModel
问题是在设备上预览 HomeView、ContentView 或运行应用程序时没有任何输出。
答案 0 :(得分:0)
在 Xcode 为新项目生成的 ContentView 文件中,我已将其放在 ContentView_Previews 中
您不仅应该在预览提供程序(用于预览模式)中执行此操作,还应该在场景创建中执行此操作(因此它适用于运行时),例如
@main
struct SwiftUI2App: App {
var chartsModel = ChartsViewModel()
var body: some Scene {
WindowGroup {
ContentView().environmentObject(ChartsViewModel()) // << here !!
}
}
}