Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 第 1 章:SwiftData 简介与核心概念

第 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 操作的执行入口
  • 关键特性:

    // 获取主线程上下文(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]

img.png

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

Last Updated:: 6/4/25, 4:09 PM