«++» устарел: он будет удален в Swift 3

После обновления до Xcode 7.3 в моем проекте появляется множество предупреждений.

'++' устарел: он будет удален в Swift 3.

Любая идея исправить это предупреждение? Есть ли причины, по которым ++ и -- будут объявлены устаревшими в будущем?


person Zigii Wong    schedule 23.03.2016    source источник
comment
Определенно дубликат... хотя этот вопрос касается бета-версии (и датирован 3 февраля), а этот касается официального релиза (датирован 23 марта, через несколько дней после Xcode 7.3 попал в магазин)... Что делать в таком случае?   -  person Nicolas Miari    schedule 23.03.2016
comment
@NicolasMiari Просто проголосуйте, чтобы закрыть его. Это все еще Xcode 7.3, мы можем только отредактировать вопрос, чтобы удалить бета-версию.   -  person Sulthan    schedule 23.03.2016


Ответы (1)


Начиная с Swift 2.2 вместо этого следует использовать += 1 или -= 1.

И после просмотра эволюции Swift есть несколько причин для удаления этих операторов:

  1. Эти операторы усложняют изучение Swift как первого языка программирования — или любого другого случая, когда вы еще не знаете эти операторы из другого языка.

  2. Их выразительное преимущество минимально — x++ ненамного короче x += 1.

  3. Swift уже отличается от C тем, что =, += и другие операции, подобные присваиванию, возвращают Void (по ряду причин). Эти операторы несовместимы с этой моделью.

  4. Swift имеет мощные функции, которые устраняют многие распространенные причины, по которым вы использовали бы ++i в цикле for в стиле C в других языках, поэтому они относительно редко используются в хорошо написанном коде Swift. Эти функции включают в себя цикл for-in, диапазоны, перечисление, карту и т. д.

  5. Код, который на самом деле использует значение результата этих операторов, часто сбивает с толку и неудобен для читателя/сопровождающего кода. Они поощряют слишком сложный код, который может быть симпатичным, но трудным для понимания.

  6. Хотя в Swift четко определен порядок вычислений, любой код, зависящий от него (например, foo(++a, a++)) был бы нежелательным, даже если бы он был четко определен.

  7. Эти операторы применимы к относительно небольшому числу типов: целочисленные скаляры и скаляры с плавающей запятой, а также концепции, подобные итераторам. Они не применяются к комплексным числам, матрицам и т. д.

Наконец, они не соответствуют метрике: если бы у нас их еще не было, добавили бы мы их в Swift 3?

Пожалуйста, проверьте Быстрая эволюция для получения дополнительной информации.

person Zigii Wong    schedule 23.03.2016
comment
если x + = 1 represent x++ ; что если ++x ? - person stan liu; 05.10.2016
comment
Я хочу увидеть источник или доказательство числа 1,5,6 - person Zuzlx; 30.11.2016
comment
глупая идея. Swift полон всех видов совершенно нового синтаксического сахара, но они удаляют классическую... чепуху - person Mike Keskinov; 22.07.2017