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

Как я могу выполнить цикл Swift for-in с шагом?

С помощью удаления традиционного цикла C-стиля в Swift 3.0, как я могу сделать следующее?

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

В Python оператор потока управления in-in имеет необязательное значение шага:

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

Но оператор диапазона Swift не имеет эквивалента:

for i in 1..<max {
    // Do something
}
4b9b3361

Ответ 1

Синоним Swift для "шага" - это "шаг" - Strideable protocol, фактически реализованный многими распространенными числовые типы.

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

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

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

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

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

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