根据《Swift 编程指南》,运算符重载是允许的,而且实际上非常通用。但是,我无法让它在操场上工作。
例如,Equatable
协议想要这样:func ==(lhs:Self, rhs:Self) -> Bool
假设我做了一个简单的Location3D
struct:
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
}
我得到的编译器错误为运算符仅允许在全局范围内使用. Huh?
所以我尝试添加@infix
到函数,将函数移动到扩展,将类型更改为类......所有这些都无济于事。
我错过了什么吗?你应该如何实施Equtable
and Comparable
当操作员似乎不起作用时?
您需要在全局范围内覆盖 == 运算符,但使用您的参数类型。
在这种情况下,这意味着您声明结构体以符合协议,然后只需在其范围之外实现该函数即可。
struct Location3D : Equatable {
// ...
}
func ==(lhs: Location3D, rhs: Location3D) -> Bool {
// ...
}
请参阅库参考以进行进一步讨论:
https://developer.apple.com/documentation/swift/equatable https://developer.apple.com/documentation/swift/equatable
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)