RealmObject Equatable 冗余消息

RealmObject Equatable redundant message

我们有一个简单的 class Person,它来自领域 Object。 现在我们希望 subclass 符合 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版本,错误依然存在。另一个奇怪的行为是,在我们的开发人员机器上,相同的代码编译得很好。

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

RealmSwift中,Object已经符合Equatable。所以你不必在 Person 的定义中添加 Equatable

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

最新版本的RealmSwift默认实现了Equatable,你可以从RealmSwift代码中查看Object.swift

要覆盖默认的 Equatable 行为,您可以覆盖此函数:

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

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

它仍在使用 isEqual,因为 RLMObjectBaseNSObject 的子类,而不是纯粹的 Swift 对象。

Swift 4 的更新签名是:

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