Swift 4.1 (and above) Updated answer:
Starting from Swift 4.1, all you have to is to conform to the Equatable
protocol without the need of implementing the ==
method. See: SE-0185 – Synthesizing Equatable and Hashable conformance.
Example:
struct MyStruct: Equatable {
var id: Int
var value: String
}
let obj1 = MyStruct(id: 101, value: "object")
let obj2 = MyStruct(id: 101, value: "object")
obj1 == obj2 // true
Keep in mind that the default behavior for the ==
is to compare all the type properties (based on the example: lhs.id == rhs.id && lhs.value == rhs.value
). If you are aiming to achieve a custom behavior (comparing only one property for instance), you have to do it by yourself:
struct MyStruct: Equatable {
var id: Int
var value: String
}
extension MyStruct {
static func ==(lhs: MyStruct, rhs: MyStruct) -> Bool {
return lhs.id == rhs.id
}
}
let obj1 = MyStruct(id: 101, value: "obj1")
let obj2 = MyStruct(id: 101, value: "obj2")
obj1 == obj2 // true
At this point, the equality would be based on the id
value, regardless of what’s the value of value
.