SwiftUI 如何在 HostingController 之间传递 EnvironmentObjects?
How does SwiftUI pass EnvironmentObjects between HostingController?
我正在尝试以与这个问题类似的方式实现 Apple Watch 应用程序:
我正在尝试在不同的 HostingController
之间传递数据。我的数据存储在具有已发布属性的 EnvironmentObject
中。如果我只使用一个 HostingController
,则可以在不同视图之间共享数据。但是当使用不同的 HostingController
,托管不同的视图(没有 segues)时,我找不到使用 Environment
对象的语法,从 HC1
到 HC2
, HC3
,等等
我在我的 SwiftUI 视图中使用这段代码展示 HostingController
。
NavigationLink(destinationName: "HC2"){
Text("Go to HC2")
这是可能的方法
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)
}
}
我正在尝试以与这个问题类似的方式实现 Apple Watch 应用程序:
我正在尝试在不同的 HostingController
之间传递数据。我的数据存储在具有已发布属性的 EnvironmentObject
中。如果我只使用一个 HostingController
,则可以在不同视图之间共享数据。但是当使用不同的 HostingController
,托管不同的视图(没有 segues)时,我找不到使用 Environment
对象的语法,从 HC1
到 HC2
, HC3
,等等
我在我的 SwiftUI 视图中使用这段代码展示 HostingController
。
NavigationLink(destinationName: "HC2"){
Text("Go to HC2")
这是可能的方法
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)
}
}