如果愿意,可以声明一个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运算符。
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
因此,如果要对Float执行此操作,请执行以下操作:infix运算符^^ {} func ^^(基数:Float,幂:Float)-> Float {return Float(pow(Double(radix),Double(power )))}
func ^^(基数:Double,幂:Double)-> Double {return Double(pow(Double(radix),Double(power)))}
我发现这并没有达到我的预期,因为优先级已关闭。对于指数运算符,将优先级设置为160(请参见developer.apple.com/library/ios/documentation/Swift/Conceptual/…和developer.apple.com/library/ios/documentation/Swift/Conceptual/…),如下所示:
infix operator ^^ { precedence 160 } func ^^
... 等等我真的很喜欢这个解决方案,但是对于Swift 3来说,它是行不通的。任何想法如何使其工作?
func p(_ b: Bool) -> Double { return b?-1:1 }
?