SwiftUI:从AppDelegate访问@EnvironmentObject

时间:2019-06-20 19:51:51

标签: swift swiftui xcode11 ios13

我想使用 applicationWillTerminate 功能在应用关闭之前保存一些用户默认设置。我要保存的数据存储在 EnvironmentObject 中。

如何从 AppDelegate 类访问它?

2 个答案:

答案 0 :(得分:2)

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

1。创建符合ObservableObject的类

class Test: ObservableObject{ }

2。在AppDelegate.Swift中声明var myVar = Test()

class AppDelegate: UIResponder, UIApplicationDelegate {
    var myVar = Test()

    //****
}

3。在SceneDelegate.swift中的“如果让windowScene =场景为UIUIScene {”中,更改代码如下:

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

}

答案 1 :(得分:1)

@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

上对所有这些都有很好的描述