如何使结构符合“Equatable”协议?
我正在使用 Xcode 7.3.1
struct MyStruct {
var id: Int
var value: String
init(id: Int, value: String) {
self.id = id
self.value = value
}
var description: String {
return "blablabla"
}
}
当我使用“MyStruct”时,Xcode 显示错误:
MyStruct 不符合协议“Equatable”
您有让 MyStruct 符合协议的想法吗?
Swift 4.1(及更高版本)更新的答案:
从 Swift 4.1 开始,你所要做的就是遵守Equatable https://developer.apple.com/documentation/swift/equatable?changes=_3协议无需执行==
方法。看:SE-0185 - 综合 Equatable 和 Hashable 一致性 https://github.com/apple/swift-evolution/blob/master/proposals/0185-synthesize-equatable-hashable.md.
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
记住的默认行为==
是为了比较all类型属性(基于示例: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
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)