如何将整个SwiftUI环境“转发”到另一个视图?

时间:2020-03-29 17:49:32

标签: swiftui swiftui-environment

似乎某些SwiftUI视图会创建新的环境上下文,例如NavigationLink。新视图中没有可用的环境。

作为一种解决方法,我只是通过环境变量手动转发,如下所示:

struct ExampleView: View {
    @EnvironmentObject var foo: UserStore
    @EnvironmentObject var bar: UserStore

    var body: some View {
        NavigationLink(destination:
            SomeOtherView()
                .environmentObject(self.foo)
                .environmentObject(self.bar)
        ) {
            Text("Open View")
        }
    }
}

然而,这似乎是无效的,因为它违反了环境的目的。另外,这很混乱,因为不清楚(或没有记录?)这些边界在哪里,并且当视图依赖于缺少的EnvironmentObject时,会导致运行时错误。

有更好的方法吗?

类似地,我想创建一个包装UIViewControllerRepresentable,该包装可以包含SwiftUI子级(通过UIHostingController),我希望这些子级也可以访问环境。

0 个答案:

没有答案