使用 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中是无用的(甚至是有害的)