RealmObject Equatable 冗余消息
Posted
技术标签:
【中文标题】RealmObject Equatable 冗余消息【英文标题】:RealmObject Equatable redundant message 【发布时间】:2016-05-10 06:48:19 【问题描述】:我们有一个简单的类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 版,错误仍然存在。另一个奇怪的行为,在我们的一台开发人员机器上,相同的代码编译得很好。
经过一些研究,我们不知道发生了什么以及如何修复或解决此问题。
【问题讨论】:
我遇到了这个问题!感谢您发布这个问题。我从实现 Hashable 中获得了多余的一致性。我的一些队友很好,而其他人则遇到了错误。 【参考方案1】:最新版RealmSwift
默认实现Equatable
,可以从RealmSwift
代码中查看Object.swift
。
要覆盖默认的Equatable
行为,您可以覆盖此函数:
public override func isEqual(object: AnyObject?) -> Bool
之后,带有==
的现有Swift 代码将根据isEqual
中定义的自定义条件返回结果。无需手动创建func ==
。
它仍在使用isEqual
,因为RLMObjectBase
是NSObject
的子类,而不是纯Swift 对象。
【讨论】:
【参考方案2】:Swift 4 的更新签名是:
open override func isEqual(_ object: Any?) -> Bool
return true
【讨论】:
【参考方案3】:在RealmSwift
中,Object
已经符合Equatable
。所以您不必在Person
的定义中添加Equatable
。
But you do not seem to be the only one having problems with this.
【讨论】:
这是我们的第一个建议。但是,如果我们从 Person 类中删除 Equatable 协议,则永远不会调用 equatable 检查。此外,Realm Object 继承自 RLMObjectBase,RLMObjectBase 继承自 NSObject。根本不符合 Equatable以上是关于RealmObject Equatable 冗余消息的主要内容,如果未能解决你的问题,请参考以下文章
题解 bzoj1923: [Sdoi2010]外星千足虫 (线性基/高斯消元)
如何使用android [关闭]获取RealmObject中的最后一个修改过的RealmObject或字段
启动 Xamarin Forms Android 应用程序时未找到 RealmObject
错误:任务“:app:compileDebugJavaWithJavac”执行失败。 > 扩展 RealmObject 类后编译失败