在SwiftUI5 中推出了@Observable
这个宏,用来代替之前 ObservableObject 协议合作@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!"
}
}
}
当点击一下 Button, 文字显示就会变成 "Hello, SwiftUI!"
在SwiftUI5推出Observable
宏今后,我们可以用新的写法去实现上面的需求。
详细代码如下:
// 改 ObservableObject 协议为@Observable
@Observable class MyModel {
// text绑定的view会自动实现监听
var text = "Hello, world!"
// 不需要监听的特点可以用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