2017-09-06 696 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