Swift3:现在如何处理优先组运算符应该用主体声明?
Swift3 : how to handle precedencegroup now operator should be declare with a body?
以前的 Swift 3 运算符代码是:
infix operator × {associativity left precedence 150}
但是现在,根据 Xcode 8 beta 6,这会生成以下警告:
"operator should not be declared with body"
由于目前不存在任何文档,使用 precedencegroup 谓词的正确方法是什么?
我已经试过了,但是没有用:
infix operator × : times
precedencegroup times {
associativity: left
precedence: 150
}
根据 SE-0077,运算符的优先级不再由幻数决定——相反,您现在使用 higherThan
和(如果组驻留在另一个模块中)lowerThan
precedencegroup
关系,以便定义相对于其他组的优先级。
例如(来自evolution proposal):
// 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 proposal。
以前的 Swift 3 运算符代码是:
infix operator × {associativity left precedence 150}
但是现在,根据 Xcode 8 beta 6,这会生成以下警告:
"operator should not be declared with body"
由于目前不存在任何文档,使用 precedencegroup 谓词的正确方法是什么?
我已经试过了,但是没有用:
infix operator × : times
precedencegroup times {
associativity: left
precedence: 150
}
根据 SE-0077,运算符的优先级不再由幻数决定——相反,您现在使用 higherThan
和(如果组驻留在另一个模块中)lowerThan
precedencegroup
关系,以便定义相对于其他组的优先级。
例如(来自evolution proposal):
// 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 proposal。