swift operators swift3 xcode8-beta6

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 .