以前的Swift 3操作员代码是:
infix operator × {associativity left precedence 150}但现在,根据Xcode 8 beta 6,这会生成以下警告:
"operator should not be declared with body"在当前没有文档的情况下,使用优先组谓词的正确方式是什么?
我试过了,但不起作用:
infix operator × : times
precedencegroup times {
associativity: left
precedence: 150
}发布于 2016-08-19 18:37:29
根据SE-0077,运算符的优先级不再由幻数确定-而是现在使用higherThan和(如果组驻留在另一个模块中) lowerThan precedencegroup关系来定义相对于其他组的优先级。
例如(从evolution proposal):
//模块Swift优先组加法{ higherThan: Range }优先组乘法{ higherThan:加法} //模块A优先组等价{ higherThan:比较lowerThan:加法//可能,因为加法位于另一个模中}插入运算符~:等价1+2~ 3 //与(1 + 2) ~ 3相同,因为加法>等价1*2~3 //与(1 * 2) ~3相同,因为乘法>加法>等价1<2~3 //与1< (2 ~ 3),因为等价性>比较1 += 2~3 //与1 += (2 ~ 3)相同,因为等价性>比较>赋值1 ... 2~3 //错误,因为范围和等价性是不相关的
尽管在您的示例中,您的运算符似乎用于乘法,但您可以简单地使用标准库的MultiplicationPrecedence组,它用于*运算符:
infix operator × : MultiplicationPrecedence它被定义为:
precedencegroup MultiplicationPrecedence {
associativity: left
higherThan: AdditionPrecedence
}有关标准库优先级组的完整列表以及有关此更改的更多信息,请参阅evolution proposal。
https://stackoverflow.com/questions/39036113
复制相似问题