【发布时间】:2019-06-20 19:51:51
【问题描述】:
我想在应用关闭前使用 applicationWillTerminate 函数保存一些用户默认设置。我要保存的数据存储在 EnvironmentObject 中。
如何从 AppDelegate 类访问它?
【问题讨论】:
-
你应该在这个上面加上 [SwiftUI] 标签 :)
标签: swift swiftui xcode11 ios13
我想在应用关闭前使用 applicationWillTerminate 函数保存一些用户默认设置。我要保存的数据存储在 EnvironmentObject 中。
如何从 AppDelegate 类访问它?
【问题讨论】:
标签: swift swiftui xcode11 ios13
@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()
}
【讨论】: