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