我们有一个简单的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 ==
。由于
isEqual
是RLMObjectBase
的子类,而不是纯粹的Swift对象,因此它仍在使用NSObject
。关于swift - RealmObject等于冗余消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37131142/