使用 SwiftUI 生命周期时,如何从 ComplicationController 访问我的模型(或 App 结构中的其他状态)?
How do I access my model (or other state in the App struct) from a ComplicationController when using SwiftUI lifecycle?
给定一个 SwiftUI 手表应用程序:
@main
struct SomeApp: App {
@StateObject var model = SomeModel()
@SceneBuilder var body: some Scene {
WindowGroup {
NavigationView {
ContentView()
}
.environmentObject(model)
}
WKNotificationScene(controller: NotificationController.self, category: "myCategory")
}
}
如何在我的 ComplicationController 中访问 model
?尝试使用 EnvironmentObject
如下但没有成功。
class ComplicationController: NSObject, CLKComplicationDataSource {
@EnvironmentObject var model: SomeModel
...
更深层次的问题是 App 结构和 ComplicationsController 的相对生命周期是什么。我有一个沉重的模型,我只想实例化一次。它只是作为一个全局变量吗?
由于 SomeModel
是应用程序的单个状态对象,因此您可以将其共享并显式访问,如下所示
class SomeModel: ObservableObject {
static let shared = SomeModel()
// ... other code
所以
@main
struct SomeApp: App {
@StateObject var model = SomeModel.shared // << here
...
和
class ComplicationController: NSObject, CLKComplicationDataSource {
var model = SomeModel.shared // << here
...
注意:EnvironmentObject
只在SwiftUI视图中有效,所以在ComplicationController
中是无用的(甚至是有害的)
给定一个 SwiftUI 手表应用程序:
@main
struct SomeApp: App {
@StateObject var model = SomeModel()
@SceneBuilder var body: some Scene {
WindowGroup {
NavigationView {
ContentView()
}
.environmentObject(model)
}
WKNotificationScene(controller: NotificationController.self, category: "myCategory")
}
}
如何在我的 ComplicationController 中访问 model
?尝试使用 EnvironmentObject
如下但没有成功。
class ComplicationController: NSObject, CLKComplicationDataSource {
@EnvironmentObject var model: SomeModel
...
更深层次的问题是 App 结构和 ComplicationsController 的相对生命周期是什么。我有一个沉重的模型,我只想实例化一次。它只是作为一个全局变量吗?
由于 SomeModel
是应用程序的单个状态对象,因此您可以将其共享并显式访问,如下所示
class SomeModel: ObservableObject {
static let shared = SomeModel()
// ... other code
所以
@main
struct SomeApp: App {
@StateObject var model = SomeModel.shared // << here
...
和
class ComplicationController: NSObject, CLKComplicationDataSource {
var model = SomeModel.shared // << here
...
注意:EnvironmentObject
只在SwiftUI视图中有效,所以在ComplicationController
中是无用的(甚至是有害的)