RealmObject Equatable 冗余消息
RealmObject Equatable redundant message
我们有一个简单的 class Person
,它来自领域 Object
。
现在我们希望 subclass 符合 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
中,Object
已经符合Equatable
。所以你不必在 Person
的定义中添加 Equatable
。
But you do not seem to be the only one having problems with this.
最新版本的RealmSwift
默认实现了Equatable
,你可以从RealmSwift
代码中查看Object.swift
。
要覆盖默认的 Equatable
行为,您可以覆盖此函数:
public override func isEqual(object: AnyObject?) -> Bool
之后,带有 ==
的现有 Swift 代码将根据 isEqual
中定义的自定义条件 return 结果。无需手动创建 func ==
。
它仍在使用 isEqual
,因为 RLMObjectBase
是 NSObject
的子类,而不是纯粹的 Swift 对象。
Swift 4 的更新签名是:
open override func isEqual(_ object: Any?) -> Bool {
return true
}
我们有一个简单的 class Person
,它来自领域 Object
。
现在我们希望 subclass 符合 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
中,Object
已经符合Equatable
。所以你不必在 Person
的定义中添加 Equatable
。
But you do not seem to be the only one having problems with this.
最新版本的RealmSwift
默认实现了Equatable
,你可以从RealmSwift
代码中查看Object.swift
。
要覆盖默认的 Equatable
行为,您可以覆盖此函数:
public override func isEqual(object: AnyObject?) -> Bool
之后,带有 ==
的现有 Swift 代码将根据 isEqual
中定义的自定义条件 return 结果。无需手动创建 func ==
。
它仍在使用 isEqual
,因为 RLMObjectBase
是 NSObject
的子类,而不是纯粹的 Swift 对象。
Swift 4 的更新签名是:
open override func isEqual(_ object: Any?) -> Bool {
return true
}