Observation Swift 完全指南:从入门到实战

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Observation 框架完全指南:从入门到实战

1. 什么是 Observation?为什么需要它?

Observation 是 Apple 在 WWDC 2023 上推出的全新框架,彻底革新了 Swift 中的数据观察机制。它取代了基于 Combine 框架中 @Published 和 ObservableObject 的旧有模式,提供了更高性能、线程安全且更直观的解决方案。Observation 的核心是 Observable 协议和 @Observable 宏,它们能够精确追踪单个属性的变化,而非整个对象。

为什么需要它?在 iOS、macOS、watchOS 和 tvOS 的现代开发中,SwiftUI 是构建界面的主要框架。SwiftUI 需要一种机制来感知数据变化,从而只重新渲染真正发生变化的界面部分。旧有的 ObservableObject 方法会在任何属性变化时重新渲染整个视图,导致不必要的计算和性能下降。Observation 通过精确追踪单个属性的变化,完美解决了这一问题。

核心优势:Observation 是 Swift 标准库的一部分(从 iOS 17、macOS 14、tvOS 17、watchOS 10 开始),无需额外依赖,完全线程安全(可在任何线程修改数据,通知在主线程传递),并通过 @Bindable 宏和新的 .onChange(of:) 修饰符与 SwiftUI 深度集成。

2. 安装指南

Observation 是 Apple 的内置框架。它是 Swift 标准库的一部分,从 Swift 5.9 和 Xcode 15 开始提供。无需通过任何包管理器(CocoaPods、Swift Package Manager、Carthage)进行额外安装。

开始使用 Observation 只需三步:

  1. 安装 Xcode 15 或更高版本。
  2. 在项目设置中,确保最低部署目标(Deployment Target)设置为 iOS 17、macOS 14、tvOS 17 或 watchOS 10。
  3. 在需要使用框架的文件中导入:import Observation。

如果你使用 SwiftUI,则无需单独导入 Observation——导入 SwiftUI 时它会自动可用。

3. 快速上手——最小工作示例

让我们创建一个简单的数据模型和显示它的视图。

import SwiftUI

// 1. 创建可观察类
@Observable
class UserSettings {
    var username: String = "游客"
    var isLoggedIn: Bool = false
}

// 2. 在视图中使用
struct ContentView: View {
    // @State 管理生命周期
    @State private var settings = UserSettings()

    var body: some View {
        VStack(spacing: 20) {
            Text("用户:\(settings.username)")
                .font(.title)

            TextField("输入用户名", text: $settings.username)
                .textFieldStyle(.roundedBorder)
                .padding()

            Toggle("登录", isOn: $settings.isLoggedIn)
                .padding()

            if settings.isLoggedIn {
                Text("您已登录为 \(settings.username)")
                    .foregroundColor(.green)
            } else {
                Text("您尚未登录")
                    .foregroundColor(.red)
            }
        }
        .padding()
    }
}

在这个示例中,@Observable 宏自动将 UserSettings 类转换为

推荐