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 的组合使用是一种非常强大的模式,用于在视图和模型之间建立响应式绑定,使得当模型状态改变时,视图能够自动更新。

上一篇下一篇

猜你喜欢

热点阅读