【问题标题】:Implementing ignoredProperties() on both a Object subclass and its own subclass在 Object 子类和它自己的子类上实现 ignoredProperties()
【发布时间】:2016-02-25 05:02:06
【问题描述】:

我是 Realm 的新手。我正在使用从 Object 继承的基类和该基类的自定义子类创建我的模型。我的模型要求基类通过覆盖静态ignoredProperties() 方法将某些属性声明为忽略。当试图在某些基类子类上覆盖该方法时,我收到一个 Swift 编译器错误,指出 类方法覆盖了“最终”类方法。我没有将我的基类实现标记为final。我不知道这是否是 Realm 当前的限制,但我似乎找不到任何关于此问题的参考。

我的代码如下所示:

class Base: Object {
    // properties declarations

    override static func ignoredProperties() -> [String] {
        return ["someProperty"]
    }
}

class SomeModel: Base {
    // properties declarations

    // compiler error here
    override static func ignoredProperties() -> [String] {
        var ignoredProperties = super.ignoredProperties()
        ignoredProperties.append("someOtherProperty")
        return ignoredProperties
    }
}

有什么想法或建议吗?我目前在当前 Xcode (7.2.1) 和最新的 Swift 上使用来自 CocoaPods 的最新 Realm。

【问题讨论】:

  • 该文档引导您远离模型继承,而是建议使用对象组合。 Base的目的是什么?
  • 你好@Michael,我使用Base主要是为我的所有模型类定义一些通用属性。

标签: swift realm


【解决方案1】:

您已将ignoredProperties 声明为:

override static func ignoredProperties() -> [String]

应该是:

override class func ignoredProperties() -> [String]

static 函数不能被子类覆盖。 class函数可以。

【讨论】:

  • 就是这样。谢谢@bdash。
【解决方案2】:

已接受的答案对我不起作用,但所做的是从父类中删除覆盖,并在子类的 ignoredProperties() 实现中添加要从父类中忽略的字段。

【讨论】:

    猜你喜欢
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    相关资源
    最近更新 更多