RealmObject Equatable冗余消息

Tho*_* G. 9 realm swift 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
}
Run Code Online (Sandbox Code Playgroud)

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

Error: Redundant conformance of ‚Person‘ to protocol ‚Equatable‘
Run Code Online (Sandbox Code Playgroud)

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

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

小智 13

默认情况下,最新版本的RealmSwift工具Equatable可以Object.swiftRealmSwift代码中查看.

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

public override func isEqual(object: AnyObject?) -> Bool
Run Code Online (Sandbox Code Playgroud)

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

它仍然使用isEqual由于RLMObjectBase子类NSObject,而不是纯粹的Swift对象.