You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:02:38