2016-08-24 45 views
8

还有的是对的Xcode 8测试版6斯威夫特3的变化,现在我不能宣布我的操作功率和我一样以前:我读过一些关于它如何在Swift 3中用新的优先级组声明指数/电力运营商?

infix operator ^^ { } 
public func ^^ (radix: Double, power: Double) -> Double { 
    return pow((radix), (power)) 
} 

,并有一个新的变化been introduced in Xcode 8 beta 6

从这我猜我必须声明一个优先级组,并用它为我的操作是这样的:

precedencegroup ExponentiativePrecedence {} 

infix operator ^^: ExponentiativePrecedence 
public func ^^ (radix: Double, power: Double) -> Double { 
    return pow((radix), (power)) 
} 

难道我要在正确的方向,使这项工作?我应该在优先组的{}中放置什么?

我的最终目标是能够使电源操作与快捷简单的操作,如:

10 ^^ -12 
10 ^^ -24 

回答

9

你的代码已经编译和运行 - 你不需要定义优先关系或关联性,如果你只是使用隔离操作,比如在你给的例子:

10 ^^ -12 
10 ^^ -24 

但是,如果你想与其他运营商合作,以及多个指数串联起来,你会想定义的优先关系的MultiplicationPrecedencea right associativity

precedencegroup ExponentiativePrecedence { 
    associativity: right 
    higherThan: MultiplicationPrecedence 
} 

因此下面的表达式:

let x = 2 + 10 * 5 ^^ 2 ^^ 3 

将被评估为:

let x = 2 + (10 * (5 ^^ (2 ^^ 3))) 
//   ^^ ^^ ^^--- Right associativity 
//   ||  \--------- ExponentiativePrecedence > MultiplicationPrecedence 
//   \--------------- MultiplicationPrecedence > AdditionPrecedence, 
//       as defined by the standard library 

标准库优先基团的完整列表可以用the evolution proposal

+0

谢谢!更新使得它更加清晰! :) – gbdavid

+0

@gbdavid乐于帮助:) – Hamish