SwiftUI:属性包装器@Published的使用示例
2024-09-17 本文已影响0人
喔牛慢慢爬
@Published用于将对象的属性标记为可以发布更改通知的。这意味着当该属性的值发生变化时,任何订阅了这个属性的观察者都会收到通知。@Published 通常与遵循 ObservableObject 协议的对象一起使用。
示例
import Combine
class MyModel: ObservableObject {
@Published var count = 0
func increment() {
count += 1
}
}
struct MyView: View {
@ObservedObject var model = MyModel()
var body: some View {
VStack {
Text("Count: \(model.count)")
Button("Increment") {
model.increment()
}
}
}
}
在这个例子中,MyModel 类有一个 @Published 属性 count。当 count 的值改变时,任何观察 MyModel 对象的视图都会自动更新以反映新的值。在 MyView 结构体中,我们使用 @ObservedObject 属性包装器来观察 MyModel 对象,这样当 count 值改变时,视图中的 Text 视图会自动更新。
注意事项
需要注意的是,@Published 只能在遵循 ObservableObject 协议的类中使用。此外,由于 @Published 属性会自动合成 objectWillChange 发布者,因此你不需要手动定义它。当你更改 @Published 属性时,objectWillChange 会向所有观察者发送更改通知。
总结
在 SwiftUI 中,@ObservedObject 和 @Published 的组合使用是一种非常强大的模式,用于在视图和模型之间建立响应式绑定,使得当模型状态改变时,视图能够自动更新。