You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftData:为已有模型添加UUID时所有实例ID重复问题

SwiftData迁移后历史实例UUID重复问题解决

问题原因

在模型V2中,wordId的默认值UUID()是在类定义阶段执行一次的,SwiftData轻量迁移时会把这个预先生成的单一UUID赋值给所有历史实例,导致旧数据的UUID完全相同。

解决方案

将wordId的默认值改为闭包延迟生成,让每个实例(包括迁移的旧实例)都能独立生成唯一UUID:

@Model
class Word {
    // 用闭包延迟生成UUID,每个实例初始化时都会执行一次
    var wordId: UUID = { UUID() }()
    private(set) var term: String = ""
    
    init(wordId: UUID, term: String) {
        self.wordId = wordId
        self.term = term
    }
    
    // 保留原初始化方法,兼容旧代码与迁移逻辑
    init(term: String) {
        self.term = term
    }
}

说明

  • 闭包形式的默认值会在每个实例初始化(包括迁移过程中创建旧实例的内存对象)时执行,因此每个历史实例都会得到唯一的UUID。
  • 保留原init(term: String)方法可以避免代码兼容问题,同时让SwiftData在迁移时正确初始化旧实例。

内容的提问来源于stack exchange,提问作者Prec99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 15:47:35