8

我们有一个简单的类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 版,错误仍然存​​在。另一个奇怪的行为,在我们的一台开发人员机器上,相同的代码编译得很好。

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

4

3 回答 3

13

默认是最新版本的RealmSwiftimplements Equatable,可以Object.swiftRealmSwift代码中查看。

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

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

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

isEqual由于RLMObjectBase子类化,它仍在使用NSObject,而不是纯 Swift 对象。

于 2016-05-10T09:48:14.233 回答
4

Swift 4 的更新签名是:

open override func isEqual(_ object: Any?) -> Bool {
    return true
}
于 2018-03-08T19:33:21.120 回答
0

RealmSwiftObject已经符合Equatable。所以你不必 EquatablePerson.

但你似乎并不是唯一一个对此有问题的人。

于 2016-05-10T07:11:31.800 回答