我已经看到了这个Swift Equatable Protocol问题的答案,其中提到了==
必须如何在全局范围内声明该方法。
如果我不采用Equatable
,我仍然可以声明==
测试我的两种类型之间的相等性。
// extension Foo: Equatable {}
func ==(lhs: Foo, rhs: Foo) -> Bool {
return lhs.bar == rhs.bar
}
struct Foo {
let bar:Int
}
事实上,它的实现需要在全局范围内声明,这使得它看起来与协议无关,即使Equatable
被采用。
Equatable
协议除了让(我们和)编译器安全地知道我们的类型实现了协议所需的方法之外,还有什么比语法糖更重要的东西吗?
为什么必须全局声明操作符实现,即使对于协议也是如此?这是由于派遣操作员的某种不同方式造成的吗?