我们有一个简单的类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版本,错误仍然存在。另一个奇怪的行为是,在我们的一台开发人员机器上,同样的代码编译得很好。
经过一些研究,我们不知道发生了什么,也不知道如何解决或解决这个问题。
RealmSwift
的最新版本默认实现Equatable
,您可以从RealmSwift
代码中查看Object.swift
。
要覆盖默认的Equatable
行为,您可以覆盖此功能:
public override func isEqual(object: AnyObject?) -> Bool
之后,现有的带有==
的Swift代码将根据isEqual
中定义的自定义条件返回结果。无需手动创建func ==
。
它仍然使用isEqual
,因为RLMObjectBase
是从NSObject
派生而来的,而不是纯粹的Swift对象。
Swift 4的更新签名是:
open override func isEqual(_ object: Any?) -> Bool {
return true
}
在RealmSwift
中,Object
已经符合Equatable
。因此,您不必在Person
的定义中添加Equatable
。
但你似乎不是唯一一个对此有问题的人。