对于具有不同值的同一个结构类,我有两个对象。我需要比较这两个对象是否相等。请指导我找到合适的解决方案。
struct CustomerInfo {
var billAddressCity: String?
init(a:String?){
billAddressCity = a
}
}
/* init object */
var obj1 = CustomerInfo?
var obj2 = CustomerInfo?
obj1 = CustomerInfo(a: "ONE")
obj2 = CustomerInfo(a: "TWO")
/* I need to compare these two objects */
if obj1 == obj2 {
Print(equal values)
}
这不是我要找的答案,因为它说我需要手动比较字段的每个值,
Compare two instances of an object in Swift
在面向对象的世界中,一般来说,所有对象都是彼此唯一的。
那么,我该如何比较两个对象呢?
你的结构/类需要实现 Equatable
协议(protocol),它让你定义一个对象如何与同一类/结构的另一个对象相等
让我们从这个 House 结构开始:
struct House {
var street: String
}
var houseA = House.init(street: "street A, n. 10")
var houseB = House.init(street: "street A, n. 10")
houseA == houseB // of course you can't
使用 Equatable
协议(protocol),您可以实现 static func ==
。在这里,您可以定义当您使用运算符 ==
时,同一类的两个对象如何相等。
在我的示例中,结构 House 的两个对象在拥有相同的街道时可能是相等的:
struct House: Equatable {
var street: String
static func == (lhs: House, rhs: House) -> Bool {
return lhs.street == rhs.street
}
}
var houseA = House.init(street: "street A, n. 10")
var houseB = House.init(street: "street A, n. 10")
houseA == houseB // now print true