我最近在学习swift,但我有一个基本问题,找不到答案
我想买点像
var a:Int = 3
var b:Int = 3
println( pow(a,b) ) // 27
但是pow函数只能处理double number,不能处理integer,我甚至不能用double(a)或a.double()之类的方法将int转换为double...
为什么它不能提供整数的幂?它肯定会返回一个没有歧义的整数!
如果我有两个整数,我想做幂运算,我怎么能顺利地做呢?
谢谢
我最近在学习swift,但我有一个基本问题,找不到答案
我想买点像
var a:Int = 3
var b:Int = 3
println( pow(a,b) ) // 27
但是pow函数只能处理double number,不能处理integer,我甚至不能用double(a)或a.double()之类的方法将int转换为double...
为什么它不能提供整数的幂?它肯定会返回一个没有歧义的整数!
如果我有两个整数,我想做幂运算,我怎么能顺利地做呢?
谢谢
如果你愿意的话,你可以申报一个infix
operator
来做这件事.
// Put this at file level anywhere in your project
infix operator ^^ { associativity left precedence 160 }
func ^^ (radix: Int, power: Int) -> Int {
return Int(pow(Double(radix), Double(power)))
}
// ...
// Then you can do this...
let i = 2 ^^ 3
// ... or
println("2³ = \(2 ^^ 3)") // Prints 2³ = 8
我使用了两个插入符号,所以你仍然可以使用XOR operator.
Update for Swift 3
在Swift 3中,"魔法数字"precedence
被precedencegroups
取代:
precedencegroup PowerPrecedence { higherThan: MultiplicationPrecedence }
infix operator ^^ : PowerPrecedence
func ^^ (radix: Int, power: Int) -> Int {
return Int(pow(Double(radix), Double(power)))
}
// ...
// Then you can do this...
let i2 = 2 ^^ 3
// ... or
print("2³ = \(2 ^^ 3)") // Prints 2³ = 8