由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(六)
概述
在 WWDC 24 中,苹果推出了数据库框架 SwiftData 2.0 版本。听说里面新增了能让数据记录“借尸还魂”的绝妙法器,到底是真是假呢?
我们在上篇博文中介绍了 History Trace 是如何稳妥的处理数据删除操作的。而在这里,我们将继续介绍 SwiftData 2.0 中另一个新特性:“墓碑”(Tombstone)。
在本篇博文中,您将学到如下内容:
- 概述
- 10. SwiftData 2.0 中的“墓碑”机制让已“死”的数据“借尸还魂”
- 11. History Trace 机制的“美中不足”
- 总结
这是本系列第六篇,也是最后一篇博文。闲言少叙,让我们马上开始 SwiftData 精彩的探究之旅吧!
Let‘s dive in!!!😉
10. SwiftData 2.0 中的“墓碑”机制让已“死”的数据“借尸还魂”
从 SwiftData 2.0 开始,苹果加入了新的“墓碑”(Tombstone)机制。它的作用很简单:就是让”有事烧纸“的数据“起死回骸”。
我们可以在托管类型中任意指定的属性上开启“墓碑”:
@Model
class Item {@Attribute(.preserveValueOnDeletion)var name: Stringvar timestamp: Dateinit(name: String) {self.name = nametimestamp = .now}
}
如上代码所示,我们在 Item 类型的 name 属性上通过 @Attribute(.preserveValueOnDeletion) 宏开启了 Tombstone 模式。一旦为托管类型开启“墓碑”模式,当该类型的实例从容器被删除后就会变为“死而不僵的尸体”,就问你们怕不怕?😃
在开启了“墓碑”模式之后,当记录被删除时我们可以通过历史记录追踪 Change 中 DefaultHistoryDelete 结构的 tombstone 属性来访问它: