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
}
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) lowerThan
precedencegroup
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 .