sobrecarga overload operator operadores operator-overloading swift

operator overloading - overload - ¿Sobrecarga del operador aún no soportada?



sobrecarga de operadores c# (1)

De acuerdo con la Guía de programación Swift, la sobrecarga del operador está permitida y es bastante versátil. Sin embargo, no he podido hacerlo funcionar en el patio de recreo.

Por ejemplo, el protocolo Equatable quiere esto: func ==(lhs:Self, rhs:Self) -> Bool

Digamos que hago una estructura simple de Location3D :

struct Location3D { var x : Double var y : Double var z : Double }

Ahora quiero que este Location3D implemente el protocolo Equatable , así que lo agrego junto con este método:

func ==(lhs: Self, rhs: Self) -> Bool { return lhs.x == rhs.x && lhs.y == rhs.y && lhs.z == rhs.z }

Obtengo el error de compilación de los operadores solo son permitidos a nivel global . Eh

Así que intenté agregar @infix a la función, mover la función a una extensión, cambiar el tipo a una clase en su lugar ... todo en vano.

¿Me estoy perdiendo de algo? ¿Cómo se supone que debes implementar Equtable y Comparable cuando los operadores parecen no funcionar?


Debe anular el operador == en el ámbito global pero con su tipo para los argumentos.

En este caso, significa que declara que su estructura se ajusta al protocolo y luego simplemente implementa la función fuera de su alcance.

struct Location3D : Equatable { // ... } func ==(lhs: Location3D, rhs: Location3D) -> Bool { // ... }

Ver la referencia de la biblioteca para más discusión:

https://developer.apple.com/documentation/swift/equatable