【发布时间】:2016-08-26 08:22:45
【问题描述】:
我想从 Realm 0.98 迁移到 1.0.2,但在继承中使用 LinkingObjects 时遇到了困难。我不能像以前一样覆盖linkingObjects 属性。
简化了我的模型存在Person,它具有pets 和cats。 Cat 是 Pet 的子类(因为它共享我在这里省略的属性)。重要的是在人员的单独列表中处理猫。让我们假设它是一个很棒的猫应用程序,它也对其他宠物有一些支持。
在 0.98 中是这样的:
class Person: Object {
let pets = List<Pet>()
let cats = List<Cat>()
}
class Pet: Object {
var linkedOwner: Person? {
get {
return linkingObjects(Pet.self, forProperty: "pets").first
}
}
}
class Cat: Pet {
override var linkedOwner: Person? {
get {
return linkingObjects(Cat.self, forProperty: "cats").first
}
}
}
因为linkingObjects 用于getter,我可以轻松地覆盖它以将属性从"pets" 更改为"cats"。
现在从 1.0 开始使用 LinkingObjects 而不是 linkingObjects 它不同,for example as described here:
class Person: Object {
let pets = List<Pet>()
let cats = List<Cat>()
}
class Pet: Object {
let linkedOwners = LinkingObjects(fromType: Person.self, property: "pets")
var linkedOwner: Person? {
get {
return linkedOwners.first
}
}
}
class Cat: Pet {
// this does not compile: Cannot override with a stored property 'linkedOwners'
override let linkedOwners = LinkingObjects(fromType: Person.self, property: "cats")
// linkedOwner would be the same so we don't need to override anymore
}
如何更改/覆盖Cat 类中用于LinkingObjects 的属性?
【问题讨论】:
标签: inheritance realm realm-migration