Обновлено для Swift 3
Ответ ниже представляет собой сводку доступных опций. Выберите тот, который наилучшим образом соответствует вашим потребностям.
reversed
: числа в диапазоне
Вперед
for index in 0..<5 {
print(index)
}
// 0
// 1
// 2
// 3
// 4
назад
for index in (0..<5).reversed() {
print(index)
}
// 4
// 3
// 2
// 1
// 0
reversed
: элементы в SequenceType
let animals = ["horse", "cow", "camel", "sheep", "goat"]
Вперед
for animal in animals {
print(animal)
}
// horse
// cow
// camel
// sheep
// goat
назад
for animal in animals.reversed() {
print(animal)
}
// goat
// sheep
// camel
// cow
// horse
reversed
: элементы с индексом
Иногда требуется индекс для итерации по коллекции. Для этого вы можете использовать enumerate()
, который возвращает кортеж. Первый элемент кортежа - это индекс, а второй элемент - это объект.
let animals = ["horse", "cow", "camel", "sheep", "goat"]
Вперед
for (index, animal) in animals.enumerated() {
print("\(index), \(animal)")
}
// 0, horse
// 1, cow
// 2, camel
// 3, sheep
// 4, goat
назад
for (index, animal) in animals.enumerated().reversed() {
print("\(index), \(animal)")
}
// 4, goat
// 3, sheep
// 2, camel
// 1, cow
// 0, horse
Обратите внимание, что, как отметил Бен Лахман в своем ответе , вы, скорее всего, захотите сделать это, .enumerated().reversed()
а не .reversed().enumerated()
(что приведет к увеличению числа индексов).
шагать: цифры
Stride - это способ итерации без использования диапазона. Есть две формы. Комментарии в конце кода показывают, какой будет версия диапазона (при условии, что размер приращения равен 1).
startIndex.stride(to: endIndex, by: incrementSize) // startIndex..<endIndex
startIndex.stride(through: endIndex, by: incrementSize) // startIndex...endIndex
Вперед
for index in stride(from: 0, to: 5, by: 1) {
print(index)
}
// 0
// 1
// 2
// 3
// 4
назад
Изменение размера приращения -1
позволяет вам вернуться назад.
for index in stride(from: 4, through: 0, by: -1) {
print(index)
}
// 4
// 3
// 2
// 1
// 0
Обратите внимание , что to
и through
различие.
шаг: элементы SequenceType
Вперед с шагом 2
let animals = ["horse", "cow", "camel", "sheep", "goat"]
Я использую 2
в этом примере, чтобы показать еще одну возможность.
for index in stride(from: 0, to: 5, by: 2) {
print("\(index), \(animals[index])")
}
// 0, horse
// 2, camel
// 4, goat
назад
for index in stride(from: 4, through: 0, by: -1) {
print("\(index), \(animals[index])")
}
// 4, goat
// 3, sheep
// 2, camel
// 1, cow
// 0, horse
Ноты