swift Equatable 的缺省实现

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:


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:

At this point, the equality would be based on the id value, regardless of what's the value of value.

 

https://stackoverflow.com/questions/37541512/swift-struct-doesnt-conform-to-protocol-equatable

 

猜测:下面两者的签名形式应该是相同的

 

/// Represents a response to a `MoyaProvider.request`.

public final class Response: CustomDebugStringConvertible, Equatable {

    public static func == (lhs: Response, rhs: Response) -> Bool {

        return lhs.statusCode == rhs.statusCode

            && lhs.data == rhs.data

            && lhs.response == rhs.response

    }

}

 

public func ==(lhs: ConstraintItem, rhs: ConstraintItem) -> Bool {

    // pointer equality

    guard lhs !== rhs else {

        return true

    }

    

    // must both have valid targets and identical attributes

    guard let target1 = lhs.target,

          let target2 = rhs.target,

          target1 === target2 && lhs.attributes == rhs.attributes else {

            return false

    }

    

    return true

}

 

posted @ 2018-10-26 15:26  zzfx  阅读(882)  评论(0编辑  收藏  举报