SwiftUI中.environmentObject传入类是否等价于单例?相关疑问
问题解答
1. 内存驻留与闭包执行的效果是否和单例一致?
是的,效果完全一致。你在MyApp.swift中创建的myAppStoreClass是App实例的顶层属性,只要应用处于运行状态,这个实例就会一直驻留在内存中,生命周期和单例完全相同。
不管用户切换到哪个界面,只要App Store的异步结果返回,初始化时传入的runOnPurchase或runOnFailure闭包都会被正常执行——这和单例的行为没有区别,因为实例始终存活,闭包的引用也一直存在。
2. @EnvironmentObject能否在所有类和视图中访问?
不能,范围有限制:
- SwiftUI视图:可以通过在视图中声明
@EnvironmentObject var store: MyAppStoreClass来直接访问这个实例,只要该视图是ContentView的子视图(或者在环境对象的作用域内)。 - 普通非视图类(比如ViewModel、数据处理类等):无法直接用
@EnvironmentObject获取。这类类需要访问的话,得通过依赖注入的方式——比如在初始化普通类时,把myAppStoreClass作为参数传进去;或者在SwiftUI视图中拿到实例后,传递给普通类的方法。
内容的提问来源于stack exchange,提问作者Duck
相关产品推荐
相关产品推荐

