苹果推出SwiftData,一个适用于SwiftUI的Core Data替代品

SwiftData 框架在 WWDC 2023 发布

在 WWDC 2023 上,Apple 推出了 SwiftData,这是一个全新的框架,旨在为 iOS 应用提供声明式、以 Swift 为先的 API,帮助开发者处理数据持久化。SwiftData 能够轻松将 Swift 类转换为持久化模型,并且特别适合与 SwiftUI 配合使用。

SwiftData 的设计理念

SwiftData 的设计理念与 Core Data 截然不同。Core Data 是一个基于 ORM 的持久化框架,严重依赖 Objective-C 的动态能力,通常通过 Xcode 中的 Schema Model Editor 定义持久化模型,并生成 .xcdatamodeld 文件作为数据模型的来源。而 SwiftData 则采用代码优先的方式,开发者直接在代码中定义持久化模型,代码本身即是数据模型的来源。

SwiftData 的核心特性

  1. 代码定义模型
    SwiftData 使用 Swift 5.9 引入的宏功能,通过 @Model 宏将 Swift 类标记为持久化模型。例如:

    @Model
    class Recipe {
        @Attribute(.unique) var name: String
        var summary: String?
        var ingredients: [Ingredient]
    }

    @Model 宏会自动为类的每个属性应用 @PersistedProperty,并生成初始化代码和其他必要的属性,完全透明地处理持久化逻辑。

  2. 支持简单和复杂类型
    SwiftData 原生支持简单类型(如 BoolIntString),复杂类型则需要遵循 Codable 协议。
  3. 与 SwiftUI 深度集成
    @Model 宏还会使类遵循 ObservableObject 协议,并使每个持久化属性表现得像 @Published 属性。开发者可以使用 @Query 属性将 SwiftUI 视图与持久化模型连接,确保数据变化时视图自动重新渲染。
  4. 谓词支持
    SwiftData 支持定义谓词来过滤数据,并在编译时检查类型匹配,避免运行时错误。
  5. 跨设备同步
    SwiftData 模型可以通过 CloudKit 或存储在 iCloud Drive 中的文档实现跨设备同步。

SwiftData 与 Core Data 的关系

SwiftData 并不是 Core Data 的封装,而是一个独立的持久化框架。尽管 SwiftData 利用了与 Core Data 相同的底层持久化引擎,但它的 API 和实现是完全独立的。

迁移支持

为了帮助开发者从 Core Data 迁移到 SwiftData,Apple 提供了增量迁移支持。开发者可以在现有的 Core Data 应用中逐步引入 SwiftData,并提供了示例项目展示如何实现这一点。

总结

SwiftData 是 Apple 在数据持久化领域的一次重要革新,它通过代码优先的方式简化了模型定义,深度集成 SwiftUI,并提供了强大的跨设备同步功能。同时,SwiftData 支持从 Core Data 逐步迁移,为开发者提供了更灵活的选择。

阅读 39
0 条评论