以前のSwift演算子の3つのコードは:
infix operator × {associativity left precedence 150}
しかし、現在、Xcode 8ベータ6に従って、これにより次の警告が生成されます。
"operator should not be declared with body"
現在、ドキュメントが存在しないため、precedencegroup述語を使用する正しい方法は何ですか?
私はこれを試しましたが、動作しません:
infix operator × : times
precedencegroup times {
associativity: left
precedence: 150
}
SE-0077 に従って、演算子の優先順位はマジック番号によって決定されなくなりました。代わりに、定義するためにhigherThan
および(グループが別のモジュールに存在する場合)lowerThan
precedencegroup
関係を使用します他のグループに対する優先順位。
例( 進化提案 から):
// 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
あなたの場合、あなたの演算子は乗算に使用されているように見えますが、単純に標準ライブラリのMultiplicationPrecedence
グループを使用できます。これは*
演算子に使用されます:
infix operator × : MultiplicationPrecedence
次のように定義されます。
precedencegroup MultiplicationPrecedence {
associativity: left
higherThan: AdditionPrecedence
}
標準ライブラリ優先グループの完全なリスト、およびこの変更の詳細については、 evolution提案 を参照してください。