微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 SceneDelegate 环境对象转换为 AppMain

如何解决将 SceneDelegate 环境对象转换为 AppMain

请随意编辑我的标题以获得更好的清晰度。

我正在开始一个新的 iOS 项目并且不再使用 SceneDelegate/AppDelegate。我的问题是我希望我的 ObservableObject 成为我整个项目的环境对象,但在转换和查找最近的示例时遇到了麻烦。

这就是我在之前的 iOS 13 项目中定义它的方式。

func scene(_ scene: UIScene,willConnectTo session: UIScenesession,options connectionoptions: UIScene.Connectionoptions){

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    
    //Environmental View
    let observer = GlobalObserver()

    let baseView = SplashScreenView().environment(\.managedobjectContext,context)
       
    if let windowScene = scene as? UIWindowScene {
        let window = UIWindow(windowScene: windowScene)
        window.rootViewController = UIHostingController(rootView: baseView.environmentObject(observer))
        self.window = window
        window.makeKeyAndVisible()
    }
}

这里是我的主要简化

@main
struct DefaultApp: App {
  
    
    //Environmental View
    let observer: GlobalObserver
    
   
    init(){
        observer = GlobalObserver()
    }

    var body: some Scene {
        WindowGroup {
            LoginView()
                //.environment(\.managedobjectContext,persistenceController.container.viewContext)
        }
    }
}

该项目生成一个 PersistenceController,我认为它与本地存储有关。我是否需要以某种方式将我的观察者传递到 loginView 的 .environment 中?

解决方法

是的,它与您在示例代码中所拥有的完全一样,只是出于某种原因您将其全部注释掉了。例如:

const index = [...UL_ELEMENT.children].indexOf(LI_ELEMENT);

现在在任何视图结构中你只要说

class Thing : ObservableObject {
    @Published var name = "Matt"
}

@main
struct SwiftUIApp: App {
    @StateObject var thing = Thing()
    var body: some Scene {
        WindowGroup {
            ContentView().environmentObject(thing)
        }
    }
}

而且很快,您正在从全局实例进行观察。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。