Swift3: cómo manejar precedencegroup ahora el operador debería declararse con un cuerpo?
operators xcode8-beta6 (1)
El anterior código de Swift 3 para el operador era:
infix operator × {associativity left precedence 150}
Pero ahora, según Xcode 8 beta 6, esto genera la siguiente advertencia:
"operator should not be declared with body"
¿Cuál es la forma correcta de usar el predicado precedencegroup ya que no existe ningún documento en este momento?
Lo he intentado pero no funciona:
infix operator × : times
precedencegroup times {
associativity: left
precedence: 150
}
Según SE-0077 , la precedencia de un operador ya no está determinada por un número mágico; en su lugar, ahora usa el valor higherThan
y (si el grupo reside en otro módulo) lowerThan
precedencegroup
relaciones del lowerThan
precedencegroup
para definir la precedencia relativa a otros grupos.
Por ejemplo (de la SE-0077 ):
// module Swift precedencegroup Additive { higherThan: Range } precedencegroup Multiplicative { higherThan: Additive } // module A precedencegroup Equivalence { higherThan: Comparative lowerThan: Additive // possible, because Additive lies in another module } infix operator ~ : Equivalence 1 + 2 ~ 3 // same as (1 + 2) ~ 3, because Additive > Equivalence 1 * 2 ~ 3 // same as (1 * 2) ~ 3, because Multiplicative > Additive > Equivalence 1 < 2 ~ 3 // same as 1 < (2 ~ 3), because Equivalence > Comparative 1 += 2 ~ 3 // same as 1 += (2 ~ 3), because Equivalence > Comparative > Assignment 1 ... 2 ~ 3 // error, because Range and Equivalence are unrelated
Aunque en su caso, como parece que su operador se usa para la multiplicación, simplemente podría usar el grupo MultiplicationPrecedence
la biblioteca estándar, que se usa para el operador *
:
infix operator × : MultiplicationPrecedence
Se define como:
precedencegroup MultiplicationPrecedence {
associativity: left
higherThan: AdditionPrecedence
}
Para obtener una lista completa de grupos de prioridad de biblioteca estándar, así como más información sobre este cambio, consulte la SE-0077 .