RealmObject Equatable冗余消息

时间:2016-05-10 06:48:20

标签: swift realm equatable

我们有一个简单的类Person,它来自领域Object。 现在我们希望该子类符合Equatable协议。非常简单的代码看起来像这样。

class Person: Object, Equatable {

    dynamic var localID     = "0"
    dynamic var name:String?
}

func ==(lhs: Person, rhs: Person) -> Bool {

    return lhs.localID == rhs.localID
}

我们从领域版本0.98.8开始,一切都按预期工作。当我们更新到版本0.102.0(以及其他版本之间)时,会出现编译器错误消息

Error: Redundant conformance of ‚Person‘ to protocol ‚Equatable‘

不够奇怪,如果降级回版本0.98.8,错误仍然存​​在。另一个奇怪的行为,在我们的一个开发者机器上,相同的代码编译得很好。

经过一些研究,我们不知道发生了什么,以及如何解决或解决这个问题。

3 个答案:

答案 0 :(得分:13)

默认情况下,RealmSwift的最新版本实施Equatable,您可以从Object.swift代码查看RealmSwift

要覆盖默认的Equatable行为,您可以覆盖此功能:

public override func isEqual(object: AnyObject?) -> Bool

之后,现有的带==的Swift代码将根据isEqual中定义的自定义条件返回结果。无需手动创建func ==

由于来自isEqual的{​​{1}}子类,它仍在使用RLMObjectBase,而不是纯粹的Swift对象。

答案 1 :(得分:1)

Swift 4的更新签名是:

open override func isEqual(_ object: Any?) -> Bool {
    return true
}

答案 2 :(得分:0)

RealmSwift中,Object已符合Equatable。因此,您不必在Equatable的定义中添加Person

But you do not seem to be the only one having problems with this.