3

我想在应用程序关闭之前使用applicationWillTerminate函数保存一些用户默认值。我要保存的数据存储在EnvironmentObject中。

如何从AppDelegate类访问它?

4

2 回答 2

5

@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对所有这些都有很好的描述

于 2019-06-23T17:00:04.260 回答
3

如果有人需要此答案的代码示例。

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()

}
于 2020-06-19T17:20:36.500 回答