我正在试着比较Swift中的两个领域对象。
// 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类中实现相等。但是Xcode不喜欢它,因为领域。
“
”与“等价”协议的ObjectClass冗余一致性
如何将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
}
发布于 2020-05-31 04:25:23
由于领域对象是NSObject的子类,因此它们已经符合可等效的和可接受的。唯一需要做的事情是重写isEqual方法:
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
override func isEqual(_ object: Any?) -> Bool {
if let object = object as? ObjectClass {
return self.order == object.order && self.number == object.number
&& self.temp == object.temp && self.state == object.state
} else {
return false
}
}
}
发布于 2020-05-31 12:24:14
tl;dr
更改对象类以包含主键,==将检查它们是否是同一个对象。如果它们是同一个对象,那么它们的属性变量将始终是相同的。
class ObjectClass: Object {
@objc dynamic var object_id = UUID().uuidString
@objc dynamic var order = 0
@objc dynamic var number = ""
@objc dynamic var temp = 0
@objc dynamic var state = 1
override static func primaryKey() -> String? {
return "object_id"
}
}
如果您只想比较对象属性,那么它是一个简单的属性和属性比较。
讨论
在比较领域对象时,我们需要了解我们正在比较的内容;您是否也在查看对象属性是否具有相同的值,还是希望查看它们是否是相同的对象?
如果其他词接受一个领域对象
class RealmObject: Object {
@objc dynamic var text = ""
}
如果创建了两个对象
let o0 = RealmObject()
o0.text = "Hello"
let o1 = RealmObject()
o1.text = "Hello"
我们比较了物体
print( o1 == o0 )
将打印false,因为o0和o1是两个独立的对象。
然而,如果我们比较一个属性
print( o0.text == o1.text )
会产生真,因为这些属性是相等的。
沿着同样的思路,在领域3.8之后,我相信您无法测试两个对象是否相同,如果没有主键,就使用相等的方法。看看这个
let o0 = ObjectClass()
o0.order = 1
try! realm.write {
realm.add(o0)
}
let o1 = realm.objects(ObjectClass.self).first!
print( o1 == o0 ) //prints false
print( o1.isSameObject(as: o0) ) //prints true
但是,如果我们向ObjectClass添加主键
class ObjectClass: Object {
@objc dynamic var object_id = UUID().uuidString
@objc dynamic var order = 0
override static func primaryKey() -> String? {
return "object_id"
}
}
然后再次运行代码,它们都会打印true。
print( o1 == o0 ) //prints true
print( o1.isSameObject(as: o0) ) //prints true
https://stackoverflow.com/questions/62111243
复制相似问题