我想使用**
来重载指数函数。如果我使用" ^"但是python的做法是**
,我想把它用在Swift上。有办法吗?
错误:没有匹配运算符声明的运算符实现
@infix func ** (num: Double, power: Double) -> Double{
return pow(num, power)
}
println(8.0**3.0) // Does not work
答案 0 :(得分:29)
您需要在定义函数之前声明运算符,如下所示:
在Swift 2中:
import Darwin
infix operator ** {}
func ** (num: Double, power: Double) -> Double {
return pow(num, power)
}
println(8.0 ** 3.0) // works
在Swift 3中:
import Darwin
infix operator **
func ** (num: Double, power: Double) -> Double {
return pow(num, power)
}
print(8.0 ** 3.0) // works
答案 1 :(得分:4)
要确保在邻居*或/之前执行**,您最好设置优先级。
infix operator ** { associativity left precedence 160 }
如http://nshipster.com/swift-operators/所示,指数运算符有160个优先级,如<<和>>按位移位运算符。