xGo*_*Pox 4 inheritance one-to-many realm ios swift
我有一个关于在境界中使用我的对象进行继承的问题.
你能好好看一下吗?我有 :
ActivitySport 我想成为其子类的对象ActivitySeminar我想成为其子类的对象Activity为了实现这一点,我根据文档编写了以下代码:
// Base Model
class Activity: Object {
dynamic var id = ""
dynamic var date = NSDate()
override static func primaryKey() -> String? {
return "id"
}
}
// Models composed with Activity
class Nutrition: Object {
dynamic var activity: Activity? = nil
dynamic var quantity = 0
}
class Sport: Object {
dynamic var activity: Activity? = nil
dynamic var quantity = 0
dynamic var duration = 0
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个模型Category,我希望它能够举行活动,无论是否是一个Nutrition或者Sport.
这是我的代码:
class Categorie: Object {
let activities = List<Activitie>()
dynamic var categoryType: String = ""
override static func primaryKey() -> String? {
return "categoryType"
}
}
Run Code Online (Sandbox Code Playgroud)
现在我尝试通过这样做为Nutrition我添加一个对象List<Activitie>:
let nutrition = Nutrition(value: [ "activity": [ "date": NSDate(), "id": "0" ], "quantity": 12 ])
try! realm.write {
realm.add(nutrition, update: true)
}
Run Code Online (Sandbox Code Playgroud)
它不起作用,因为List<Activitie>期望一个ActivityObject而不是一个NutritionObject.我哪里错了?
非常感谢您的帮助.
您遇到了Realm的一个重大问题:没有完整的多态性.
这篇github文章重点介绍了可能与否,以及一些可以使用的解决方案.
从以上链接的jpsim快速报价:
现在在境界的继承让你:
- 父类的类方法,实例方法和属性在其子类中继承.
- 将父类作为参数的方法和函数可以在子类上运行.
它不会让你:
- 多态类之间的转换(子类 - >子类,子类 - >父类,父类 - >子类等).
- 同时查询多个类.
- 多类容器(RLMArray/List和RLMResults/Results).