温馨提示:本文最后更新于
2025-01-18 19:09:55
,某些文章具有时效性,若有错误或已失效,请在下方留言。如果你的模型类有一个或多个存储属性,希望在写入持久化存储时忽略一些属性,可以使用 @Transient
宏进行标注,这样 SwiftData 就不会将它们的值写入磁盘。
默认情况下,SwiftData 会将所有计算属性视为临时属性,因此你无需显式标注这些属性。
@Model class RemoteImage {
var sourceURL: URL
var data: Data
@Transient var isDownloading = false
@Transient var levels = 0
init(sourceURL: URL, data: Data = Data(), isDownloading: Bool) {
self.sourceURL = sourceURL
self.data = data
self.isDownloading = isDownloading
}
}
除非被注解的属性类型是可选的,@Transient
宏要求您提供默认值。这一限制确保了在执行获取操作时,SwiftData 能够成功实例化封闭模型类的实例。模型中的 levels
属性在应用运行时的默认值为 0
,并且在应用终止时会自动重置为0
—该属性不会被存储在SwiftData中。
SwiftData 仅自动保存模型的存储属性,而所有计算属性都会被视为临时属性。例如,如果我们希望将 Player
模型放入 levelsPlayed
中,可以添加一个计算属性来显示他们的姓名和分数:
@Model class Player {
var name: String
var score: Int
@Transient var levelsPlayed = 0
var highScoreEntry: String {
"\(name) scored \(score) points"
}
init(name: String, score: Int) {
self.name = name
self.score = score
}
}
1. 临时属性不能用于 SwiftData 查询谓词,因为相关数据并不存储在磁盘上。虽然在编译时不会出错,但在运行时会导致崩溃。
2.临时属性必须始终提供默认值,以确保在创建新对象或从磁盘获取现有对象时,始终有一个有效值。
3. 任何计算属性都会被视为临时属性,例如上面示例中 highScoreEntry
不会写入磁盘。
© 版权声明
THE END
暂无评论内容