SwiftUI如何在HostingController之间传递EnvironmentObjects?

问题描述 投票:0回答:1

我正试图用类似这个问题的方式实现一个Apple Watch应用。在WatchOS中使用SwiftUI实现从主控制器到基于页面的控制器导航的问题。

我正试图在不同的 HostingControllers. 我的数据存储在一个 EnvironmentObject 与发布的属性。如果我只用一个 HostingController在不同的视图之间共享数据是可以的。但当使用不同的 HostingController,托管不同的视图(无转场),我找不到使用我的 Environment 对象从 HC1HC2జజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజ HC3、等。

我提出 HostingController 在我的SwiftUI视图中使用这段代码。

NavigationLink(destinationName: "HC2"){
        Text("Go to HC2")
swiftui watchkit
1个回答
1
投票

这里是可能的方法

class AppState: ObservableObject {
    static let shared = AppState()      // shared instance

    @Published var setting: String = "some"
}

class HostingController: WKHostingController<AnyView> {
    override var body: AnyView {
        let contentView = ContentView()
            .environmentObject(AppState.shared)     // << inject !!
        return AnyView(contentView)
    }
}

class HostingController2: WKHostingController<AnyView> {
    override var body: AnyView {
        let contentView = ContentView2()
            .environmentObject(AppState.shared)     // << inject !!
        return AnyView(contentView)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.