我们有一个简单的Person类,它是 Realm Object固有的。
现在,我们希望该子类符合Equatable协议(protocol)。非常简单的代码如下所示。

class Person: Object, Equatable {

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

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

    return lhs.localID == rhs.localID
}

我们从 Realm 版本0.98.8开始,并且一切都按方面进行。当我们更新到版本0.102.0(以及之间的其他版本)时,出现编译器错误消息
Error: Redundant conformance of ‚Person‘ to protocol ‚Equatable‘

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

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

最佳答案

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

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

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

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

由于isEqualRLMObjectBase的子类,而不是纯粹的Swift对象,因此它仍在使用NSObject

关于swift - RealmObject等于冗余消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37131142/

10-12 14:38
查看更多