当我实现哈希协议时。需要在类外部定义一个等价的协议函数,如下所示。如下。

func ==(lhs: Swap, rhs: Swap) -> Bool {
    return (lhs.cookieA == rhs.cookieA && lhs.cookieB == rhs.cookieB) ||
        (lhs.cookieB == rhs.cookieA && lhs.cookieA == rhs.cookieB)
}

class Swap: Printable,Hashable {
    var cookieA: Cookie
    var cookieB: Cookie

    init(cookieA: Cookie, cookieB: Cookie) {
        self.cookieA = cookieA
        self.cookieB = cookieB
    }
    var hashValue: Int {
    return cookieA.hashValue ^ cookieB.hashValue
    }

    var description: String {
    return "swap \(cookieA) with \(cookieB)"
    }
}

对我来说有点奇怪。在上面的示例中,func==应该属于类交换。那么,为什么我们需要在类外部声明func==呢??

最佳答案

主要是因为它是一个函数而不是一个方法。函数独立于类,因此在类声明中对它们进行范围划分是没有意义的。
该协议可以用方法设计,例如使用obj1.isEqualTo(obj2)方法,但函数对nil问题不太敏感。如果obj1nil,该方法将失败。

关于swift - 为什么需要在类外定义等同协议(protocol)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24819776/

10-12 17:28