如何比较两个Struct对象?

时间:2017-09-06 12:02:16

标签: ios swift

对于具有不同值的同一结构类,我有两个对象。我需要比较这两个对象是否相等。请引导我通过适当的解决方案。

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

2 个答案:

答案 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)
    }
}