Как я могу "переслать" всю среду SwiftUI в другое представление? - PullRequest
0 голосов
/ 29 марта 2020

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

...