苹果推出SwiftData,一款支持SwiftUI的核心数据替代品
2023年06月13日 由 Camellia 发表
945587
0
在WWDC2023上,苹果公司推出了SwiftData,这是一个新的框架,它提供了一个声明性的、以Swift为先的API,可以在iOS应用中进行数据持久化工作。SwiftData可以轻松地将一个Swift类变成一个持久化模型,特别适合与SwiftUI一起使用。
几年前通过SwiftUI彻底改变了其平台上定义UI的方式后,现在苹果正在迈出超越Core Data的第一步,Core Data是一种基于ORM的持久化框架,严格绑定了Objective-C的动态功能。
虽然它提供了一个API来定义持久化模型,但是使用Core Data通常需要通过Xcode集成的模式模型编辑器。生成的.xcdatamodeld文件就是真实版本的来源,然后用于自动生成存根代码。这些存根代码提供了用于实际模型类的基类。
SwiftData采用相反的方法,其中代码是关于持久化数据模型的真实来源。以下是定义简单模型的示例:
需要注意的是,SwiftData依赖于Swift 5.9中引入的一个新的宏功能。在幕后,@Model宏将@PersistedProperty应用于Recipe中的每个属性,并向类实现中添加初始化代码和其他所需属性。
由于这种附加逻辑对开发人员完全透明,SwiftData能够将所有属性映射到底层存储中。据苹果称,当需要时,从持久存储中获取持久对象并更新至持久存储。
虽然Bool、Int和String等简单类型是默认使用的,但是更复杂的类型必须符合Codable协议才能用于持久化类中。
正如前面提到的那样,SwiftData特别适用于与SwiftUI一起使用。实际上,@Model宏也会使类符合ObservableObject协议,并使每个持久属性行为像@Published属性。此外,为了将SwiftUI视图连接到持久模型,您只需使用与使用@State和@Binding类似的新@Query属性。@Query将确保在底层数据更改时自动重新渲染视图。
SwiftData还支持定义可用于过滤数据的谓词。谓词在编译时检查,并在类型不匹配时引发编译错误。此外,SwiftData模型可以使用CloudKit或作为存储在iCloud Drive中的文档在设备之间进行同步。
为了使开发人员更容易地迁移到SwiftData,该框架支持在现有的Core Data应用程序中增量采用。苹果提供了一个示例项目,展示如何仅在Core Data应用程序的一部分中使用SwiftData。
最后需要注意的是,SwiftData不是Core Data的包装。正如苹果在WWDC上展示的那样,SwiftData利用与Core Data使用相同的持久化引擎,但它是一个完全独立的堆栈。
来源:https://www.infoq.com/news/2023/06/swiftdata-persistent-framework/