Ant*_*eve 3 overloading operators swift equatable
我正在快速学习并阅读了有关扩展中运算符重载的主题,其中包括:
extension StreetAddress: Equatable {
static func == (lhs: StreetAddress, rhs: StreetAddress) -> Bool {
return
lhs.number == rhs.number &&
lhs.street == rhs.street &&
lhs.unit == rhs.unit
}
}
Run Code Online (Sandbox Code Playgroud)
但我怎么知道我需要采用 Equatable 呢?
我尝试删除该协议,并且该功能的工作原理相同。不会报告任何警告或错误。为什么?
引用苹果文档:
要采用 Equatable 协议,请将等于运算符 (==) 实现为您类型的静态方法
因此,实现Equatable意味着您必须重载该==运算符,因此这是一个构建错误:
extension StreetAddress: Equatable {
}
Run Code Online (Sandbox Code Playgroud)
重载 == 运算符不需要并且与 不严格相关Equatable,例如:
class StreetAddress {
var theAddress:String?
static func == (lhs: StreetAddress, rhs: StreetAddress) -> Bool {
return lhs.theAddress?.lowercased() == rhs.theAddress?.lowercased()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7937 次 |
| 最近记录: |