«C-style for statement is deprecated» — знакомое предупреждение? На самом деле ничего страшного в нем нет, и слово «deprecated» означает лишь то, что то, что этим словом обозначено то что устарело и в будущих версиях языка будет исключено окончательно. C-style для циклов будет удален в Swift 3. На первый взгляд это может показаться странным, но Swift имеет некоторые особенности, которые позволят сделать структуру циклов несколько лучше.
C-Style для циклов
Давайте для начала посмотрим, что же такое C-стиль для циклов:
1 2 3 4 5 | let programmingLanguages = ["Swift","Objective-C","Java"] for var i = 0; i < programmingLanguages.count; i++ { print("index: \(i), value: \(programmingLanguages[i])") } |
Это работает, но это не очень удобно и не очень «Swifty». На самом деле такое даже не очень легко учить и запоминать.
For-in в цикле
For-in цикл обеспечивает достаточную функциональность, что бы достичь того же результата. Давайте взглянем на более простой вариант:
1 2 3 | for language in programmingLanguages { print("value: \(language)") } |
Он работает, но у него есть один недостаток: у вас нет доступа к индексу (i). Однако, мы можем решить эту проблему с помощью кортежа и функции enumerate():
1 2 3 | for (index,language) in programmingLanguages.enumerate() { print("index: \(index), value: \(language)") } |
Теперь у нас есть все что нам нужно! На мой взгляд, этот синтаксис гораздо легче читать, чем синтаксис в C-стиле.
Но что насчет словарей? Здесь вы также можете использовать очень простой синтаксис:
1 2 3 4 5 | let plattformLanguages = ["Android":"Java","iOS":"Swift"] for (key,value) in plattformLanguages { print("key: \(key), value:\(value)") } |
В данном случае даже не нужно вызывать метод словаря. Вы просто используете for-in в сочетании с кортежем.
Swift 3
Конечно, могут возникнуть споры по поводу целесообразности того, что в Swift 3 С-циклы будут удалены. С одной стороны, вам придется реорганизовывать существующий код, и у вас больше не будет выбора. Но с другой стороны, это заставит разработчиков исользовать синтаксис, который просто лучше. Поэтому, как мне кажется, это хороший шаг.
Кстати, недавно мы публиковали статью о будущем Swift 3 в контексте WWDC 2016.
А что вы думаете об этом? Хороша ли идея удаления С-циклов из Swift 3? Оставляйте свои мысли в комментариях!
На мой взгляд, синтаксис
for var i = 0; i < programmingLanguages.count; i++ {
print("index: \(i), value: \(programmingLanguages[i])")
}
трудночитаемый. А этот синтаксис
for language in programmingLanguages {
print("value: \(language)")
}
выглядит очень здорово