我已经看到了这个Swift Equatable Protocol问题的答案,该问题提到了如何==在全局范围内声明该方法.
如果我不采用Equatable,我仍然可以声明==测试我的两种类型之间的相等性.
// extension Foo: Equatable {}
func ==(lhs: Foo, rhs: Foo) -> Bool {
return lhs.bar == rhs.bar
}
struct Foo {
let bar:Int
}
Run Code Online (Sandbox Code Playgroud)
它的实现需要在全球范围内声明的事实使得它似乎是偶然的,并且与协议不同,即使Equatable被采用.
Equatable协议如何只是语法糖只是让(我们和)编译器安全地知道我们的类型实现了协议所需的方法?
为什么运算符实现必须全局声明,即使对于协议也是如此?这是由于调度操作员的某种不同方式吗?