Я видел ответ на этот Swift Equableable Protocol вопрос, который упоминает, как метод ==
должен быть объявлен в глобальной области.
Если я не принимаю Equatable
, я все равно могу объявить ==
для проверки равенства между двумя моими типами.
// extension Foo: Equatable {}
func ==(lhs: Foo, rhs: Foo) -> Bool {
return lhs.bar == rhs.bar
}
struct Foo {
let bar:Int
}
Тот факт, что его реализация должна быть объявлена в глобальной области, делает ее случайной и отличной от протокола, даже если был принят Equatable
.
Как протокол Equatable
ничего больше, чем синтаксический сахар, который просто позволяет (нам и) компилятору безопасно знать, что наш тип реализовал требуемый метод протокола?
Почему реализация оператора должна быть объявлена во всем мире даже для протокола? Это связано с каким-то другим способом отправки оператора?