2017-09-06 158 views
-2

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

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

+0

你的结构必须符合Equatable协议使用“==”的对比 –

+0

_”这不是我正在寻找的答案“_嗯,这就是答案不管... –

回答

1

在面向对象的世界,一般来说,所有对象都是彼此唯一的。

那么,我怎么可以比较两个对象?

你的结构/类需要实现Equatable协议,它让你定义一个对象如何能等于同一类的其他对象/结构

让我们与这所房子结构开始:

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: 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

由于符合Equatable

struct CustomerInfo: Equatable { 
    var billAddressCity: String? 

    init(a:String?){ 
     billAddressCity = a 
    } 

    static func ==(lhs: CustomerInfo, rhs: CustomerInfo) -> Bool { 
     return (lhs.billAddressCity == rhs.billAddressCity) 
    } 
} 
+0

我该如何称此方法? – Jan

+0

我需要比较结构的每个领域?我正在寻找替代方法。 – Jan

+0

如果以这种方式定义'CustomerInfo',则可以简单地执行'if obj1 == obj2'。该比较将调用'static func =='并通过比较'billAddressCity'返回结果。 – sCha