第 2 章:创建第一个 SwiftData 应用
定义你的第一个数据模型 (@Model)
1. @Model 宏的基本用法
SwiftData 的核心是数据模型定义,通过 @Model 宏可以快速声明一个持久化模型:
import SwiftData
@Model
class Book {
var title: String
var author: String
var publishDate: Date
init(title: String, author: String, publishDate: Date) {
self.title = title
self.author = author
self.publishDate = publishDate
}
}
2. 模型属性的特性
- 自动持久化:所有存储属性默认会被持久化
- 延迟加载:使用
@Attribute(.externalStorage)标记大数据类型(如二进制数据) - 唯一标识:
@Attribute(.unique)可强制属性唯一性
@Model
class User {
@Attribute(.unique) var id: UUID
@Attribute(.externalStorage) var avatar: Data?
}
3. 模型继承规则
- 支持从
NSObject或其他@Model类继承 - 父类需标记为
@Model才会持久化父类属性
@Model
class MediaItem {
var createDate: Date
}
@Model
class Movie: MediaItem {
var duration: TimeInterval
}
4. 模型验证器
通过 @Model 宏的 validation 参数添加验证逻辑:
@Model(validation: {
guard $0.pages > 0 else {
throw ValidationError("Page count must be positive")
}
})
class ValidatedBook {
var pages: Int
}
5. 模型版本控制
建议在模型类添加版本标识符:
@Model
class VersionedModel {
static let schemaVersion = 1
//...
}
最佳实践
- 使用
final class提高性能 - 为模型设计合理的初始化方法
- 将复杂业务逻辑放在扩展中
@Model
final class Product {
var name: String
var price: Double
}
extension Product {
func applyDiscount(rate: Double) {
price *= (1 - rate)
}
}
注意:模型类必须定义为引用类型(class),结构体(struct)不被支持
