将 SceneDelegate Enviromental Object 转换为 AppMain
Converting SceneDelegate Enviromental Object to AppMain
请随意编辑我的标题以便更清晰。
我正在开始一个新的 iOS 项目并且不再使用 SceneDelegate/AppDelegate。我的问题是我希望我的 ObservableObject 成为我整个项目的环境 Object,但在转换和查找最近的示例时遇到问题。
这是我在之前的 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 中?
是的,它与您在示例代码中的完全一样,只是出于某种原因您将其全部注释掉了。例如:
class Thing : ObservableObject {
@Published var name = "Matt"
}
@main
struct SwiftUIApp: App {
@StateObject var thing = Thing()
var body: some Scene {
WindowGroup {
ContentView().environmentObject(thing)
}
}
}
现在,在您刚才说的任何视图结构中
@EnvironmentObject var thing : Thing
很快,您正在从全局实例进行观察。
请随意编辑我的标题以便更清晰。
我正在开始一个新的 iOS 项目并且不再使用 SceneDelegate/AppDelegate。我的问题是我希望我的 ObservableObject 成为我整个项目的环境 Object,但在转换和查找最近的示例时遇到问题。
这是我在之前的 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 中?
是的,它与您在示例代码中的完全一样,只是出于某种原因您将其全部注释掉了。例如:
class Thing : ObservableObject {
@Published var name = "Matt"
}
@main
struct SwiftUIApp: App {
@StateObject var thing = Thing()
var body: some Scene {
WindowGroup {
ContentView().environmentObject(thing)
}
}
}
现在,在您刚才说的任何视图结构中
@EnvironmentObject var thing : Thing
很快,您正在从全局实例进行观察。