Swift Data:苹果全新 ORM 框架,简化 Swift 数据持久化
1. 什么是 Swift Data?为什么需要它?
Swift Data 是苹果在 WWDC 2023 上推出的现代化、轻量级 ORM(对象关系映射)框架,专为 Swift 应用中的持久化数据管理而设计,支持 iOS 17+、macOS 14+、tvOS 17+ 和 watchOS 10+。Swift Data 取代了老旧的 Core Data,提供更简单、声明式且类型安全的方式来管理数据库。
为什么需要 Swift Data?核心目的是大幅简化代码。开发者无需手动创建 NSManagedObject、配置上下文或编写复杂的 Swift 查询,只需通过普通的 Swift 类和宏(@Model、@Attribute、@Relationship)来描述数据模型。Swift Data 会自动生成所有底层逻辑:表创建、变更管理、依赖跟踪,并通过 SwiftUI 实现 UI 同步。
关键优势在于与 SwiftUI 的深度集成。数据变更会自动更新界面,无需手动调用 objectWillChange.send() 或重新加载列表。这使得 Swift Data 成为需要本地数据存储(如任务列表、笔记、设置、缓存)的 SwiftUI 新项目的理想选择。
2. 安装指南
Swift Data 是苹果标准库的一部分,从 iOS 17 和 macOS 14 开始内置。无需通过包管理器(如 pip、npm、cargo)单独安装。使用时只需在 Swift 文件中导入框架即可。
重要提示:项目的部署目标(Deployment Target)最低必须设为 iOS 17.0 或 macOS 14.0。
通过 Xcode 添加到项目的命令:
// Swift Data 无需安装,直接导入即可:
import SwiftData
如果你使用 Swift Package Manager (SPM) 管理依赖,无需将 Swift Data 作为独立包添加——它已内置于 SDK 中。
3. 快速上手——最小化工作示例
创建一个简单的待办事项(To-Do)列表应用。
import SwiftUI
import SwiftData
// 1. 定义数据模型
@Model
final class TaskItem {
var title: String
var isCompleted: Bool
var createdAt: Date
init(title: String, isCompleted: Bool = false) {
self.title = title
self.isCompleted = isCompleted
self.createdAt = Date()
}
}
// 2. 在 App 中配置容器
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
.modelContainer(for: TaskItem.self) // 自动创建容器
}
}
// 3. 在视图中使用数据
struct ContentView: View {
@Environment(\.modelContext) private var context
@Query private var tasks: [TaskItem]
var body: some View {
NavigationStack {
List {
ForEach(tasks) { task in
HStack {
Text(task.title)
Spacer()
if task.isCompleted {
Image(systemName: "checkmark")
}
}
}
.onDelete(perform: deleteTasks)
}
.navigationTitle("待办事项")
.toolbar {
ToolbarItem {
Button("添加") {
let newTask = TaskItem(title: "新任务 \(tasks.count + 1)")
context.in