与Swift Realm的继承,混乱

xGo*_*Pox 4 inheritance one-to-many realm ios swift

我有一个关于在境界中使用我的对象进行继承的问题.

你能好好看一下吗?我有 :

  • 一个东西 Activity
  • 一个Sport 我想成为其子类的对象Activity
  • 一个Seminar我想成为其子类的对象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.我哪里错了?

非常感谢您的帮助.

Yoa*_*ges 7

您遇到了Realm的一个重大问题:没有完整的多态性.

这篇github文章重点介绍了可能与否,以及一些可以使用的解决方案.

从以上链接的jpsim快速报价:

现在在境界的继承让你:

  • 父类的类方法,实例方法和属性在其子类中继承.
  • 将父类作为参数的方法和函数可以在子类上运行.

它不会让你:

  • 多态类之间的转换(子类 - >子类,子类 - >父类,父类 - >子类等).
  • 同时查询多个类.
  • 多类容器(RLMArray/List和RLMResults/Results).