在SwiftUI5 中推出了@Observable這個宏,用來代替之前 ObservableObject 協(xié)議配合@Published 宏來綁定模型屬性和視圖的功能蜻牢。
在之前代碼中如果想通過模型的屬性來綁定視圖
,寫法如下:
class MyModel: ObservableObject {
@Published var text = "Hello, world!"
var name = "liaoworking."
}
struct ContentView: View {
@StateObject var model = MyModel()
var body: some View {
Text(model.text)
Button("Change Model") {
model.text = "Hello, SwiftUI!"
}
}
}
當(dāng)點擊一下 Button, 文字顯示就會變成 "Hello, SwiftUI!"
在SwiftUI5推出Observable
宏以后偏陪,我們可以用新的寫法去實現(xiàn)上面的需求孩饼。
具體代碼如下:
// 改 ObservableObject 協(xié)議為@Observable
@Observable class MyModel {
// text綁定的view會自動實現(xiàn)監(jiān)聽
var text = "Hello, world!"
// 不需要監(jiān)聽的屬性可以用ObservationIgnored宏來修飾。
@ObservationIgnored
var name = "liaoworking."
}
struct ContentView: View {
// 模型前使用@State去修飾
@State private var model = MyModel()
var body: some View {
Text(model.text)
Button("Change Model") {
model.text = "Hello, SwiftUI!"
}
}
}
目前該特性只支持XCode15可用竹挡, 版本支持為iOS17極以上版本。
具體官方遷移文檔如下:
Migrating from the Observable Object protocol to the Observable macro