Кажется, что определенные представления 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
), и я хотел бы, чтобы эти дети также имели доступ к среде.