Swift 4.1(及更高版本)更新答案:
从 Swift 4.1 开始,你所要做的就是遵守Equatable
协议而不需要实现==
方法。请参阅:SE-0185 - 综合 Equatable 和 Hashable 一致性。
例子:
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
请记住,默认行为==
是比较所有类型属性(基于示例:)lhs.id == rhs.id && lhs.value == rhs.value
。如果您的目标是实现自定义行为(例如仅比较一个属性),则必须自己完成:
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
此时,相等性将基于id
值,而不管 的值是多少value
。