Realm 中的模型可以被进一步子类化,模型之间可以复用大量代码,但是不支持 Cocoa 的运行时类多态性。可以做到下面这些事:
- 子类可以继承父类的类方法、实例方法和属性。
- 以父类为参数的方法和函数,也可以接受它的子类。
下面这些事是做不到的:
- 在多态类间进行转换(即子类到子类、子类到父类、父类到子类等等)。
- 同时查询多个类。
- 多类容器(List 和 Results)
Realm 正在按计划 添加这个功能,目前 提供了一些代码示例 ,用于解决一些较常见的模式。
又或者,如果你愿意的话,Realm 建议使用以下模式的类组合,以构建包含其他类逻辑的子类:
// 基类
class Animal: Object {
dynamic var age = 0
}
// 继承自 Animal 的模型
class Duck: Object {
dynamic var animal: Animal? = nil
dynamic var name = ""
}
class Frog: Object {
dynamic var animal: Animal? = nil
dynamic var dateProp = NSDate()
}
// 使用
let duck = Duck(value: [ "animal": [ "age": 3 ], "name": "Gustav" ])