@ObservedObject or @StateObject

@ObservedObject or @StateObject

在 SwiftUI 中,@ObservedObject@StateObject 均可传播 @Published 更新.

  • ViewA has @ObservedObject manager. 则 manager 可在 ViewA.init() 中使用 self.manager = .init() 初始化.
  • @StateObject 则不行,它是一个属性包装器,Swift 编译器会将其转换为两个属性:
    • 一个带下划线的存储属性 _myStateObject (实际类型是 StateObject
    • 一个计算属性 myStateObject (实际类型是 MyModel )
场景使用SwiftUI 是否负责生命周期是否能被观察更新
当前 View 创建对象@StateObject✅ 是✅ 是
外部传入的对象@ObservedObject❌ 否✅ 是
值类型,或不需触发更新不用❌ 否❌ 否