2016-08-24 45 views
8

Xcode 8 beta 6 Swift 3'te bir değişiklik oldu ve şimdi önce yaptığı gibi güç için benim operatörü bildirmek mümkün değilim: Ben bu konuda biraz okudumSwift 3'te yeni öncelik grubu ile üs/güç operatörü nasıl bildirilir?

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

ve orada

precedencegroup ExponentiativePrecedence {} 

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

Ben bu işi yapmak için doğru yönde mıyım: Bundan yeni değişiklik been introduced in Xcode 8 beta 6

Ben öncelik grubu beyan ve bunun gibi benim operatör için kullanmak zorunda tahmin ediyorum? Öncelik grubunun {} içerisine ne koymalıyım?

Benim nihai amacı, Swift basit operatör ile güç işlemlerini yapabilmek için örneğin:

10 ^^ -12 
10 ^^ -24 

cevap

9

Kodunuz zaten derlenmiş ve çalışan - Bir öncelik ilişkisi veya tanımlamak gerekmez sadece böyle verdiğin örnekte olduğu gibi tek başına operatörü kullanıyorsanız birleşebilirlik: Eğer diğer operatörler ile çalışmak, hem de birlikte birden üslerin zincirleme istiyorsanız

10 ^^ -12 
10 ^^ -24 

Ancak, isteyeceksinizolan bir öncelik ilişkisini tanımlamak, MultiplicationPrecedence ve a right associativity.

precedencegroup ExponentiativePrecedence { 
    associativity: right 
    higherThan: MultiplicationPrecedence 
} 

Bu nedenle aşağıdaki ifade:

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

standart kütüphane öncelik gruplarının tam listesi the evolution proposal geçerli:

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

olarak değerlendirilecektir.

+0

Teşekkür ederiz! güncellemeyi daha da açık hale getirdi! :) – gbdavid

+0

@gbdavid Yardım etmek için mutluyum :) – Hamish