代码之家  ›  专栏  ›  技术社区  ›  Antonio Steve

swift:重载“==”操作符时,为什么需要符合Equalable?

  •  3
  • Antonio Steve  · 技术社区  · 7 年前

    我正在学习swift,并阅读了一个关于扩展中操作符重载的主题,如:

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

    但是我怎么知道我需要采用equalable呢?

    我尝试删除该协议,该函数的工作原理相同。 不会报告任何警告或错误。 为什么?

    1 回复  |  直到 6 年前
        1
  •  5
  •   mugx    7 年前

    引用Apple documentation :

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

    so实施 Equatable 意思是你 必须 过载 == 运算符,因此这是一个生成错误:

    extension StreetAddress: Equatable {
    }
    

    重载==运算符不需要,也不是 严格地 与相关 均衡的 ,例如:

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