swift:为什么需要在重载" =="运营商?

时间:2017-12-15 02:19:28

标签: swift operators overloading equatable

我正在学习swift并阅读有关扩展中运算符重载的主题,其中包括:

extension StreetAddress: Equatable {
    static func == (lhs: StreetAddress, rhs: StreetAddress) -> Bool {
        return
            lhs.number == rhs.number &&
            lhs.street == rhs.street &&
            lhs.unit == rhs.unit
    }
}

但我怎么知道我需要采用Equatable?

我试图删除该协议,该功能也一样。 不报告任何警告或错误。 为什么呢?

1 个答案:

答案 0 :(得分:1)

引用Apple documentation

  

采用Equatable协议,实现等于运算符(==)   作为你的类型的静态方法

因此实施Equatable意味着必须重载==运算符,因此这是一个构建错误:

extension StreetAddress: Equatable {
}

重载==运算符并不需要严格Equatable相关,例如:

class StreetAddress {
    var theAddress:String?

    static func == (lhs: StreetAddress, rhs: StreetAddress) -> Bool {
        return lhs.theAddress?.lowercased() == rhs.theAddress?.lowercased()
    }
}