Согласно Руководству по быстрому программированию, перегрузка оператора разрешена и фактически довольно универсальна. Однако мне не удалось заставить его работать на игровой площадке.
Например, протокол Equatable
требует этого: func ==(lhs:Self, rhs:Self) -> Bool
Скажем, я делаю простую конструкцию Location3D
:
struct Location3D
{
var x : Double
var y : Double
var z : Double
}
Теперь я хочу, чтобы этот Location3D
реализовал протокол Equatable
, поэтому я добавляю его вместе с этим методом:
func ==(lhs: Self, rhs: Self) -> Bool
{
return lhs.x == rhs.x &&
lhs.y == rhs.y &&
lhs.z == rhs.z
}
Я получаю ошибку компилятора операторов разрешены только в глобальной области. А?
Итак, я попробовал добавить функцию @infix
к функции, переместив функцию на расширение, вместо этого изменив тип на класс... все безрезультатно.
Я что-то упустил? Как вы должны реализовать Equtable
и Comparable
, когда операторы не работают?