【问题标题】:swift: why need to conform equatable when overload the "==" operator?swift:为什么在重载“==”运算符时需要符合equatable?
【发布时间】:2017-12-15 02:19:28
【问题描述】:

我正在学习 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?

我尝试删除该协议并且该功能的工作方式相同。 不会报告任何警告或错误。 为什么?

【问题讨论】:

  • 符合Equatable需要你实现==,但实现==不需要你符合Equatable

标签: swift operators overloading equatable


【解决方案1】:

引用苹果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()
    }
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-12-02
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多