在 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)
由于mates
是let
变量。您无法通过
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
变量”允许?
答案 0 :(得分:2)
Realm中的所有模型属性都是可变的。但是,通用属性不会生成objective-c getter和setter,因此无法覆盖,这就是为什么Realm中的List
和RealmOptional
属性必须定义为let
,因为如果它们是var
并通过本地二传手重新分配,那么Realm就不会知道并且会发生坏事。
由于Realm 可以处理setValue(_:forKey:)
,因此可行。