@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 的組合使用是一種非常強大的模式,用于在視圖和模型之間建立響應式綁定,使得當模型狀態改變時,視圖能夠自動更新。