在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
网友评论