对于具有不同值的同一结构类,我有两个对象。我需要比较这两个对象是否相等。请引导我通过适当的解决方案。
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)
}
这不是Iam寻找的答案,因为它说我需要手动比较每个字段值, Compare two instances of an object in Swift
答案 0 :(得分:13)
在面向对象的世界中,通常,所有对象彼此都是唯一的。
那么,我如何比较两个对象?
你的struct / class需要实现Equatable
协议,它允许你定义一个对象如何等于同一个类/ struct的另一个对象
让我们从这个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
协议,您可以实施static func ==
。在这里,您可以定义在使用运算符==
时,同一个类的两个对象如何相等。
在我的例子中,当它们具有相同的街道时,struct 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
答案 1 :(得分:2)
符合Equatable
:
struct CustomerInfo: Equatable {
var billAddressCity: String?
init(a:String?){
billAddressCity = a
}
static func ==(lhs: CustomerInfo, rhs: CustomerInfo) -> Bool {
return (lhs.billAddressCity == rhs.billAddressCity)
}
}