SwiftUI:属性包装器@Published的使用示例

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容