Отказываемся от старых циклов в Swift 2.2

Как все знают, мы постепенно отказываемся от старых «C-style» циклов в Swift 2.2. Благо, что как только вышел Xcode 7.3, то сразу вежливо предложил переделать все «старые» циклы на новый синтаксис. И оказалось, что почти все старые варианты в большом проекте у меня имели вид

for var i = 0; i < 10; i++ {
    print(i)
}

и поэтому Xcode их успешно сам заменил. Но сегодня я решил провести с ним эксперимент. Я прочитал статью Natasha The Robot о новом синтаксисе циклов и все варианты из статьи засунул в чистый проект, чтобы проверить, насколько Xcode может подсказать, как лучше изменить синтаксис на новый. Оказалось, что «автозамена» есть только у самого простого типа, который я показал выше. Тот же вариант  с обратным циклом уже не «кушается» автоматически

 
for var i = 10; i > 0; i-- {
    print(i)
}

все, на что хватает Xcode в этой ситуации, это заменить i— на i -= 1

Из всех вариантов в той статье самый необычный и незнакомый для меня был бы

/* 0, 2, 4, 6, 8 */

// instead of this
for var i = 0; i < 10; i += 2 {
    print(i)
}

// use this
for i in 0.stride(to: 10, by: 2) {
    print(i)
}

Вообще, циклы вида

for number in someNumbers {
    print(number)
}

имеют бОльшую читаемость и удобство, и это то, к чему надо стремиться. Но если для базовых классов Swift предлагает эту функциональность «из коробки», то для ваших классов это можно легко написать с помощью протоколов SequenceType и создания генераторов — Generator.

Полный список Наташиных «переделок» смотрим в ее статье вот тут. Теперь я знаю все варианты! 🙂

https://www.natashatherobot.com/swift-alternatives-to-c-style-for-loops/

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s