SwiftData宏@Transient
SwiftData宏@Transient

SwiftData宏@Transient

@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语法版继承,作用相同:不保存、不同步、仅内存存在。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注