@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 )
- 一个带下划线的存储属性 _myStateObject (实际类型是 StateObject
场景 | 使用 | SwiftUI 是否负责生命周期 | 是否能被观察更新 |
---|---|---|---|
当前 View 创建对象 | @StateObject | ✅ 是 | ✅ 是 |
外部传入的对象 | @ObservedObject | ❌ 否 | ✅ 是 |
值类型,或不需触发更新 | 不用 | ❌ 否 | ❌ 否 |