Swift Struct 不符合 Equatable 协议?

2024-04-24

如何使结构符合“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(使用前将#替换为@)

Swift Struct 不符合 Equatable 协议? 的相关文章

随机推荐