25

运算符的前 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
}
4

1 回答 1

60

根据SE-0077,运算符的优先级不再由幻数确定 - 相反,您现在使用higherThanand(如果组位于另一个模块中)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
}

有关标准库优先级组的完整列表,以及有关此更改的更多信息,请参阅进化提案

于 2016-08-19T10:37:28.903 回答