为什么可以在Realm中重新分配List <t>属性?

时间:2016-08-25 13:25:59

标签: list realm swift3

Realm 中,需要将List<T>属性命名为let,例如:

class Dog:Object {
    dynamic name = "doggy"
    let mate = List<Dog>()
}

let dog1 = Dog()
dog1.name = "Bark"
let dog2 = Dog()
dog2.name = "Brave"
dog1.mates.append(dog2)

由于mateslet变量。您无法通过

重新分配
let dog3 = Dog()
dog3.name = "Bright"
dog3.mates.append(dog2)
//dog1.mates = dog3.mates // Cannot assign to property: 'mates' is a 'let' constant

但你可以通过

重新分配
dog1["mates"] = dog3.mates // works
dog1.setValue(dog3.mates, forKey: "mates") //works

我的问题是为什么“重新分配let变量”允许?

1 个答案:

答案 0 :(得分:2)

Realm中的所有模型属性都是可变的。但是,通用属性不会生成objective-c getter和setter,因此无法覆盖,这就是为什么Realm中的ListRealmOptional属性必须定义为let,因为如果它们是var并通过本地二传手重新分配,那么Realm就不会知道并且会发生坏事。

由于Realm 可以处理setValue(_:forKey:),因此可行。