如何解决将 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 举报,一经查实,本站将立刻删除。