2016-08-24 46 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