2016-02-22 4 views
20

С removal of the traditional C-style for-loop in Swift 3.0, как я могу сделать следующее?Как я могу выполнить цикл Swift for-in с шагом?

for (i = 1; i < max; i+=2) { 
    // Do something 
} 

В Python, для-контроле отчет о движении имеет опциональное значение шага:

for i in range(1, max, 2): 
    # Do something 

Но оператор Swift диапазон, кажется, не имеет аналогов:

for i in 1..<max { 
    // Do something 
} 
+2

Похожий вопрос: http://stackoverflow.com/questions/35032182/swift-c-style-loops-deprecated-decrement-index. –

+0

Я этого не видел! Я нашел [это] (http://stackoverflow.com/questions/32197250/using-stride-in-swift-2-0), что привело меня к моему ответу. Ключевое слово, которое я отсутствовал, когда я искал (прежде чем задавать вопрос), было «stride» - я использовал термин «шаг» и не нашел полезных результатов. Затем, когда я нашел шаг, я обнаружил [сообщение на тему] Эрики Садун (http://ericasadun.com/2015/05/21/swift-six-killer-features/), которая теперь устарела. –

ответ

59

Свифт синоним «шага» - это «шаг» - фактически Strideable protocol, реализованный many common numerical types.

Эквивалент (i = 1; i < max; i+=2) является:

for i in stride(from: 1, to: max, by: 2) { 
    // Do something 
} 

В качестве альтернативы, чтобы получить эквивалент i<=max, использовать through вариант:

for i in stride(from: 1, through: max, by: 2) { 
    // Do something 
} 

Обратите внимание, что stride возвращает StrideTo/StrideThrough, которая соответствует Sequence, поэтому все, что вы можете сделать с помощью последовательности, вы можете сделать с результатом вызова stride (т.е. map, forEach, filter и т. Д.). Например:

stride(from: 1, to: max, by: 2).forEach { i in 
    // Do something 
} 
+1

Кто знал ??! Благодарю. – Fattie

+15

в swift 3 вы можете использовать глобальные функции 'stride (from: through: by:)' и 'stride (from: to: by:)' как 'for i in stride (от: 1 до: max, by : 2) {...} ' –

+3

@MarkoNikolovski, пожалуйста, не добавляйте код к ответам других пользователей. Мы не хотим вкладывать слова в их рот. Вместо этого добавьте новый ответ. Поскольку этот вопрос закрыт, вы можете добавить новый ответ на связанный дубликат. – JAL

Смежные вопросы