Eri*_*rik 18 operator-overloading swift
根据Swift编程指南,操作符重载是允许的,实际上非常通用.但是,我一直无法让它在操场上工作.
例如,Equatable
协议想要这样:func ==(lhs:Self, rhs:Self) -> Bool
假设我做了一个简单的Location3D
结构:
struct Location3D
{
var x : Double
var y : Double
var z : Double
}
Run Code Online (Sandbox Code Playgroud)
现在我希望这个Location3D
实现Equatable
协议,所以我将它与此方法一起添加:
func ==(lhs: Self, rhs: Self) -> Bool
{
return lhs.x == rhs.x &&
lhs.y == rhs.y &&
lhs.z == rhs.z
}
Run Code Online (Sandbox Code Playgroud)
我得到运算符的编译错误只允许在全局范围内.咦?
所以我尝试添加@infix
到函数中,将函数移动到扩展名,将类型更改为类而不是......一切都无济于事.
我错过了什么吗?您应该如何实施Equtable
,Comparable
何时运营商似乎无法运作?
hal*_*ski 40
您需要覆盖全局范围中的==运算符,但需要使用参数类型.
在这种情况下,它意味着您声明您的结构符合协议,然后简单地在其范围之外实现该功能.
struct Location3D : Equatable {
// ...
}
func ==(lhs: Location3D, rhs: Location3D) -> Bool {
// ...
}
Run Code Online (Sandbox Code Playgroud)
有关进一步的讨论,请参阅库参考:
https://developer.apple.com/documentation/swift/equatable
归档时间: |
|
查看次数: |
5565 次 |
最近记录: |