SwiftUI 最新数据模型完整解析:@Observable、@State、@Bindable(iOS17+ 全新范式)
核心结论:在 iOS 17+ 中,SwiftUI 引入了全新的 Observation 数据模型体系,核心由 @Observable、@State 和 @Bindable 三大关键属性包装器组成,彻底简化了状态管理与双向绑定
新范式的三大核心
1. @Observable —— 定义可观察模型
-
取代旧的
ObservableObject+@Published组合。 -
所有存储属性自动可观察,无需额外声明。
-
SwiftUI 会精确追踪属性变化来源,避免全局广播带来的性能浪费。
-
示例:
swift@Observable class UserModel { var name = "HanQiu" var age = 23 }
2. @State —— 持有模型实例
-
在新体系中,
@State不仅能保存简单值,还能直接持有@Observable模型实例。 -
等价于旧时代的
@StateObject,但语法更简洁。 -
示例:
swiftstruct ContentView: View { @State private var user = UserModel() var body: some View { Text(user.name) } }
3. @Bindable —— 双向绑定
-
用于在子视图中对
@Observable模型进行 双向绑定。 -
替代了旧的
@ObservedObject,语义更清晰。 -
示例:
swiftstruct EditView: View { @Bindable var user: UserModel var body: some View { TextField("Name", text: $user.name) } }
与旧体系的对比
| 旧版 (iOS16及以前) | 新版 (iOS17+) |
|---|---|
ObservableObject |
@Observable |
@Published |
自动追踪属性变化 |
@StateObject |
@State 持有模型 |
@ObservedObject |
@Bindable |
@EnvironmentObject |
仍可用,但更推荐 @Observable 配合依赖注入 |
优势
-
更简洁:装饰器数量减少,语义更直观。
-
更安全:类型安全,避免生命周期混乱。
-
更高性能:精准追踪属性变化,避免不必要的刷新。
-
更 Swift 化:充分利用 Swift 5.9 宏系统,代码更贴近语言本身。
总结
SwiftUI 在 iOS 17+ 的新数据模型是一次 范式升级:
-
@Observable负责定义模型 -
@State负责持有模型 -
@Bindable负责双向绑定
这让 SwiftUI 的状态管理更轻量、更直观、更高效,开发者不再需要在 ObservableObject、@Published、@StateObject、@ObservedObject 之间纠结。

浙公网安备 33010602011771号