Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何对使用@infix func**()的指数使用**?_Swift_Operators_Infix Operator - Fatal编程技术网

Swift 如何对使用@infix func**()的指数使用**?

Swift 如何对使用@infix func**()的指数使用**?,swift,operators,infix-operator,Swift,Operators,Infix Operator,我想使用**重载指数函数。如果我使用像“^”这样的东西,我可以工作,但是python的工作方式是**,我想在Swift中使用它。有办法吗 错误:运算符实现没有匹配的运算符声明 在定义函数之前,需要声明运算符,如下所示: 在Swift 2中: import Darwin infix operator ** {} func ** (num: Double, power: Double) -> Double { return pow(num, power) } println(8.

我想使用
**
重载指数函数。如果我使用像“^”这样的东西,我可以工作,但是python的工作方式是
**
,我想在Swift中使用它。有办法吗

错误:运算符实现没有匹配的运算符声明


在定义函数之前,需要声明运算符,如下所示:

在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

要确保在相邻*或/之前执行**,最好设置优先级

infix operator ** { associativity left precedence 160 }

如图所示,指数运算符具有160个优先级,就像>按位移位运算符一样。

您确定
^
按预期工作吗?我只把它作为加法:
println(1^2)==3
@vol7ron
^
是按位异或运算符
1^2
恰好等于
1+2
。请参阅,语言指南->高级运算符->按位异或运算符。@Lensflare:我刚才说的是Python,其中
^
不作为指数。我认为我错了,误读了这个问题,这表明他可以在Swift中重载
^
来充当插入符号,但他想使用
**
,当尝试重载时,它不起作用。您需要使用Jamie的答案告诉编译器您要使用的函数名。从beta 6开始,它必须是
infix operator**{}
。谢谢@Klaas,我更新了Xcode 6 beta 6.Swift3的答案:
infix operator**
谢谢@GitSyncApp,我也用Swift 3代码更新了答案。
infix operator ** { associativity left precedence 160 }