@Transient 表示该属性不会被存储到数据库中,也不会与 CloudKit 同步。
@Transient
var propertyName: Type
SwiftData不会为它在SQLite / CloudKit中创建字段,这个属性只存在于内存中,通常用于“计算属性”或“临时状态”。
使用场景
1、用于计算属性
@Model
class PiggyBank {
    var amount: Double = 0
    var targetAmount: Double = 1000
    @Transient
    var progress: Double {
        guard targetAmount > 0 else { return 0 }
        return amount / targetAmount
    }
}
SwiftData不会在数据库中保存 progress字段,而是每次从内存计算出来。
2、用于临时状态
在模型中保存 UI 临时状态,比如是否展开、是否被选中:
@Transient
var isExpanded: Bool = false
这不会被保存到数据库,也不会被 iCloud 同步,非常适合界面逻辑。
不添加@Transient
如果在SwiftData中,不对计算属性添加@Transient:
var progress: Double { amount / targetAmount }
SwiftData的宏系统(@Model)会尝试自动将progress包装成被观察的属性,并声称 getter / setter 观察期,并进行存储。
总结
在SwiftData中计算属性和临时变量推荐使用@Transient,这里保存临时状态。
不会出现字段同步到CloudKit的情况,也避免后续出现字段同步的问题。
在CoreData中类似的是 @NSManaged:
@NSManaged var ...
表示某个属性不参与持久化,CoreData称为Transient Property(瞬态属性)。
SwiftData中的@Transient实际上是它的Swift语法版继承,作用相同:不保存、不同步、仅内存存在。
				    