似乎某些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
),我希望这些子级也可以访问环境。