我正在尝试比较Swift中的两个Realm对象。
// Object 1 Prints:
currentObject: Optional(ObjectClass {
order = 0;
number = 010;
temp = 903;
state = 6;
})
// Object 2 Prints:
lastObject: Optional(ObjectClass {
order = 0;
number = 010;
temp = 903;
state = 6;
})
显然,这些值是相等的。但对象不是。
print(lastObject?.number == currentObject?.number) // Prints True
print(lastObject == currentObject) // Prints False
我尝试在object类中实现equatable。但Xcode不喜欢它,因为Realm。
“ObjectClass”与协议“Equatable”的冗余一致性
如何比较lastObject和currentObject的变量?我想有一个比检查每个对象的变量更好的方法。但我不知道是什么。
对象类:
import UIKit
import RealmSwift
class ObjectClass: Object {
@objc dynamic var order = 0
@objc dynamic var number = ""
@objc dynamic var temp = 0
@objc dynamic var state = 1
}
2条答案
按热度按时间6jygbczu1#
领域对象已经符合Equatable和Hashable,因为它们是NSObject的子类。你唯一需要做的就是重写isEqual方法:
wwtsj6pe2#
博士
更改对象类以包含主键,并且==将用于查看它们是否是相同的 * 对象 *。如果它们是同一个对象,那么它们的属性变量将总是相同的
如果只想比较对象的属性,那么这是一个简单的属性间比较(或者实现isEqual并根据其他答案使用==)
讨论
当比较Realm对象时,我们需要了解我们在比较什么;你是想看看对象属性是否具有相同的值,还是想看看它们是否是相同的对象?
如果其他单词使用Realm对象
如果创建了两个对象
我们比较了这些物体
将打印false,因为o 0和o 1是两个独立的对象。
而如果我们比较一个属性
会产生true,因为这些属性是相等的。
同样的道理,在境界3之后。8我相信你不能在没有主键的情况下使用Equatable来测试两个对象是否相同。看看这个
但是,如果我们向ObjectClass添加主键
并再次运行代码,它们都打印true