【发布时间】:2014-07-31 15:18:16
【问题描述】:
根据 Swift Programming Guide,运算符重载是允许的,而且实际上非常通用。但是,我无法让它在操场上工作。
例如,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
}
我得到操作符只允许在全局范围内的编译器错误。嗯?
所以我尝试将@infix 添加到函数中,将函数移动到扩展,将类型更改为类...全部无济于事。
我错过了什么吗?当运算符似乎不起作用时,您应该如何实现Equtable 和Comparable?
【问题讨论】:
-
global scope将指向任何类或扩展声明之外的位置
标签: operator-overloading swift