我想在应用程序关闭之前使用applicationWillTerminate函数保存一些用户默认值。我要保存的数据存储在EnvironmentObject中。
如何从AppDelegate类访问它?
@EnvironmentObject
不需要直接在 SwiftUI 对象中实例化;相反,它可以分配到其他地方(例如,您的 UISceneDelegate),然后使用该.environment(…)
函数传递。
您也可以在 AppDelegate 上分配它,然后将该对象传递给您的UISceneDelegate.scene(_:willConectTo:options:)
方法中的视图。
Paul Hudson 在https://www.hackingwithswift.com/quick-start/swiftui/how-to-use-environmentobject-to-share-data-between-views对所有这些都有很好的描述
如果有人需要此答案的代码示例。
1.创建符合ObservableObject的类
class Test: ObservableObject{ }
2.在 AppDelegate.Swift 中声明 var myVar = Test()
class AppDelegate: UIResponder, UIApplicationDelegate {
var myVar = Test()
//****
}
3.在SceneDelegate.swift中的“if let windowScene = scene as?UIWindowScene {”中修改代码如下:
if let windowScene = scene as? UIWindowScene {
let myVar = (UIApplication.shared.delegate as! AppDelegate).myVar
window.rootViewController = UIHostingController(rootView: contentView.environmentObject(myVar))
self.window = window
window.makeKeyAndVisible()
}