我正在学习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?
我试图删除该协议,该功能也一样。 不报告任何警告或错误。 为什么呢?
答案 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()
}
}