web-dev-qa-db-fra.com

Swift3: comment gérer le groupe de priorité maintenant l'opérateur doit être déclaré avec un corps?

Ancien Swift 3 code pour l'opérateur était:

infix operator × {associativity left precedence 150}

Mais maintenant, selon Xcode 8 beta 6, cela génère l'avertissement suivant:

"operator should not be declared with body"

Quelle est la bonne façon d'utiliser le prédicat precedencegroup car aucun document n'existe actuellement?

J'ai essayé cela, mais ne fonctionne pas:

infix operator × : times
precedencegroup times {
     associativity: left 
     precedence: 150
}
23
Stéphane de Luca

Selon SE-0077 , la priorité d'un opérateur n'est plus déterminée par un nombre magique - à la place, vous utilisez maintenant le higherThan et (si le groupe réside dans un autre module) lowerThanprecedencegroup relations afin de définir la priorité par rapport aux autres groupes.

Par exemple (à partir de la proposition d'évolution ):

// 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

Bien que dans votre cas, comme il semble que votre opérateur soit utilisé pour la multiplication, vous pouvez simplement utiliser le groupe MultiplicationPrecedence de la bibliothèque standard, qui est utilisé pour le * opérateur:

infix operator × : MultiplicationPrecedence

Il est défini comme:

precedencegroup MultiplicationPrecedence {
  associativity: left
  higherThan: AdditionPrecedence
}

Pour une liste complète des groupes de priorité de bibliothèque standard, ainsi que plus d'informations sur ce changement, voir proposition d'évolution .

57
Hamish