Подтвердить что ты не робот

Swift3: как обрабатывать оператор приоритета теперь оператор должен объявляться с телом?

Бывший код Swift 3 для оператора:

infix operator × {associativity left precedence 150}

Но теперь, согласно Xcode 8 beta 6, это вызывает следующее предупреждение:

"operator should not be declared with body"

Каков правильный способ использования предиката preencegroup как не существующего документа?

Я пробовал это, но не работает:

infix operator × : times
precedencegroup times {
     associativity: left 
     precedence: 150
}
4b9b3361

Ответ 1

В соответствии с 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
}

Полный список стандартных групп приоритетов библиотеки, а также дополнительная информация об этом изменении см. в эволюционном предложении.