Swift Struct doesn't conform to protocol Equatable?

前端 未结 4 2113
轻奢々
轻奢々 2021-02-07 01:37

How do I make a structure conform to protocol \"Equatable\"?

I\'m using Xcode 7.3.1

struct MyStruct {
   var id: Int
   var value: String

   init(id: In         


        
4条回答
  •  忘掉有多难
    2021-02-07 02:02

    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.

提交回复
热议问题