SwiftUI @EnvironmentObject 在嵌套视图中共享

时间:2021-02-05 21:09:14

标签: swift swiftui

我在尝试使用 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 或运行应用程序时没有任何输出。

1 个答案:

答案 0 :(得分:0)

<块引用>

在 Xcode 为新项目生成的 ContentView 文件中,我已将其放在 ContentView_Previews 中

您不仅应该在预览提供程序(用于预览模式)中执行此操作,还应该在场景创建中执行此操作(因此它适用于运行时),例如

@main
struct SwiftUI2App: App {
    var chartsModel = ChartsViewModel()

    var body: some Scene {
        WindowGroup {
            ContentView().environmentObject(ChartsViewModel())   // << here !!
        }
    }
}