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

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

但是我怎么知道我需要采用等号呢?
我试图删除该协议,但该函数的工作原理相同。
不报告警告或错误。
为什么?

最佳答案

引用苹果:
要采用等价协议,请执行equal to运算符(==)
作为您类型的静态方法
因此,实现Equatable意味着您必须重载==运算符,因此这是一个生成错误:

extension StreetAddress: Equatable {
}

重载==运算符不需要也不与Equatable严格相关,例如:
class StreetAddress {
    var theAddress:String?

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

10-01 06:02