第 1 章:SwiftData 简介与核心概念
核心概念:@Model、ModelContainer、ModelContext、Query
1. @Model 宏:数据模型的基石
- 作用:用于标记 Swift 类或结构体为 SwiftData 的持久化模型
- 特性:
- 自动实现
PersistentModel协议 - 支持属性动态跟踪变更(无需手动实现
Observable) - 示例代码:
@Model class Book { var title: String var author: String var publishDate: Date }
- 自动实现
- 自动功能:
- 主键自动生成(
persistentModelID) - 自动生成数据模型版本哈希值
- 主键自动生成(
2. ModelContainer:持久化存储的管理者
核心职责:
- 管理底层数据库连接
- 处理模型到数据库 Schema 的映射
- 提供数据持久化的配置选项
初始化方式:
// 基础初始化(自动生成默认配置) let container = try ModelContainer(for: Book.self) // 高级配置(内存存储+禁用撤销) let config = ModelConfiguration(inMemory: true, allowsSave: false) let container = try ModelContainer(for: Book.self, config)典型配置选项:
isStoredInMemoryOnly:内存存储(适合测试)allowsSave:是否允许保存更改cloudKitContainerIdentifier:CloudKit 集成配置
3. ModelContext:数据操作的执行者
角色定位:
- 相当于 Core Data 的
NSManagedObjectContext - 所有 CRUD 操作的执行入口
- 相当于 Core Data 的
关键特性:
// 获取主线程上下文(UI 操作必须使用) let context = container.mainContext // 创建后台上下文(耗时操作使用) let bgContext = container.newBackgroundContext()核心功能:
- 变更跟踪(自动检测
@Model对象的修改) - 撤销管理(支持
undoManager集成) - 批量操作(通过
enumerate方法优化性能)
- 变更跟踪(自动检测
4. Query:声明式数据查询
- 两种查询方式对比:
| 特性 | @Query 宏 | fetch() 方法 |
|---|---|---|
| 使用场景 | SwiftUI 视图集成 | 命令式编程场景 |
| 自动更新 | ✅ 数据变化时自动刷新 | ❌ 需手动刷新 |
| 谓词支持 | 通过 #Predicate 宏 | NSPredicate 传统方式 |
| 排序控制 | 初始化参数指定 | 通过 SortDescriptor |
@Query示例:struct BookListView: View { @Query(sort: \Book.title, order: .forward) private var books: [Book] var body: some View { List(books) { book in Text(book.title) } } }谓词高级用法:
// 查找2023年出版的科幻书籍 @Query(filter: #Predicate<Book> { book in book.publishDate >= Calendar.current.date(from: DateComponents(year: 2023))! && book.publishDate < Calendar.current.date(from: DateComponents(year: 2024))! && book.genre == "科幻" }) private var scifiBooks: [Book]
组件协作流程图
graph TD
A[(Model)] --> B[ModelContainer]
B --> C[ModelContext]
C --> D[(SQLite Database)]
A --> E[Query]
C --> E
E --> F[SwiftUI View]

最佳实践提示:在开发过程中,建议始终通过
modelContext.autosaveEnabled = true启用自动保存功能,可避免因忘记调用save()导致的数据丢失问题。
