SwiftData|为 App 添加预设数据
想象一下,一个代办事项 App 需要提供标签功能,并且你想为 App 提供一些预设的标签供用户选择。
* 使用枚举来实现标签功能。这会导致用户无法创建自定义标签,因此枚举是写死的。
* 使用 SwiftData 实现标签功能 —— 这时候就需要为 SwiftData 生成预设数据。
SwiftData 创建预设数据的挑战
一种最简单的方法是,使用枚举来定义预设数据,并在 App 启动时检查是否有预设数据,如果没有就自动创建并添加 SwiftData。
这看起来很简单,但在实践中仍然存在一些困难。
CloudKit 导致的数据重复
如果启用了 CloudKit 云同步,当用户在同一个 Apple 账户的另一台设备安装,或者同一台设备卸载后再次安装时,由于 iCloud 数据同步存在延迟,会导致初始化程序创建重复的 SwiftData 数据。
因此,我们不能够简单的仅通过检查本地是否有数据来决定是否添加预设数据。
解决方案:需要同时检查 CloudKit 云端,仅在本地和云端均无数据时,才执行添加操作。