繁体   English   中英

SwiftUI:从 AppDelegate 访问 @EnvironmentObject

[英]SwiftUI: Access @EnvironmentObject from AppDelegate

我想使用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()

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM