@Published用于將對象的屬性標記為可以發(fā)布更改通知的贡避。這意味著當該屬性的值發(fā)生變化時刊苍,任何訂閱了這個屬性的觀察者都會收到通知梯影。@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 發(fā)布者,因此你不需要手動定義它州邢。當你更改 @Published 屬性時儡陨,objectWillChange 會向所有觀察者發(fā)送更改通知褪子。
總結
在 SwiftUI 中,@ObservedObject 和 @Published 的組合使用是一種非常強大的模式骗村,用于在視圖和模型之間建立響應式綁定嫌褪,使得當模型狀態(tài)改變時,視圖能夠自動更新胚股。