SwiftData

SwiftData 使用声明式代码,可轻松保留数据。你可以使用常规 Swift 代码来查询和筛选数据。同时,SwiftData 还能与 SwiftUI 无缝集成。

新功能

SwiftData 提供了表现力强的轻量级 API,可用于使用纯 Swift 代码对 App 的数据进行建模并持久保留数据。而新增 API 将帮助你构建自定数据存储,处理交易历史记录、模型索引和复合唯一性约束,等等。

观看最新视频

使用 Swift 创建模型

你可以通过 @model 使用常规 Swift 类型对数据进行建模,而无需管理其他文件或工具。SwiftData 能自动推断多种关系,你可以使用明确的声明 (如 #Unique) 来描述约束。与 SwiftUI 一样,代码即事实来源。

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

自动持久化

SwiftData 使用你的模型来构建自定架构,将模型的字段高效地映射到底层存储;并会根据需要从数据库中获取由 SwiftData 管理的对象,在适当的时候将其自动存储,而无需额外操作。你还可以使用 ModelContext API,掌控全局。

自定数据存储

默认情况下,SwiftData 使用 Core Data 来实现持久化,但你也可以使用新的 DataStore 协议来实现自己的持久化层。借助 DataStore,SwiftData API 可以与许多类型的持久化 (包括 JSON 文件和网络服务及数据库引擎) 结合使用,而无需更改 SwiftUI 和 SwiftData 建模代码。

与 SwiftUI 集成

在 SwiftUI 视图中,可使用 @query 来获取数据。SwiftData 和 SwiftUI 搭配使用可在底层数据发生变化时,向视图提供实时更新,而无需手动刷新结果。

@Query var recipes: [Recipe]
var body: some View {
	List(recipes) { recipe in
		NavigationLink(recipe.name, destination: RecipeView(recipe))
	}
}

Swift 原生谓词

使用可由编译器进行检查的原生 Swift 类型来查询和筛选数据,以便你在开发过程中及早发现问题。当表达式无法映射到底层存储引擎时,谓词会提供编译时错误。

let simpleFood = #Predicate<Recipe> { recipe in
	recipe.ingredients.count < 3
}

CloudKit 同步

你可以使用 DocumentGroup 将数据储存在文件中并通过 iCloud 云盘进行同步,也可以使用 CloudKit 在设备之间同步数据。

与 Core Data 兼容

SwiftData 使用的是 Core Data 的成熟存储架构,因此你可以在同一个 App 中同时使用两者,并使用同一底层存储。当你准备就绪后,Xcode 可以将你的 Core Data 模型转换为类,与 SwiftData 结合使用。