以前的Swift 3运算符代码为:
infix operator × {associativity left precedence 150}
但是现在,根据Xcode 8 beta 6,这将产生以下警告:
"operator should not be declared with body"
什么是使用prioritygroup谓词的正确方法,因为目前没有文档?
我已经尝试过了,但是不起作用:
infix operator × : times
precedencegroup times {
associativity: left
precedence: 150
}
根据SE-0077,运算符的优先级不再由幻数确定-而是现在使用higherThan
and(如果组位于另一个模块中)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
}
有关标准库优先级组的完整列表,以及有关此更改的更多信息,请参见演进建议。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句