Enumerated используется для перебора коллекции вместе с доступом к позиции. Он возвращает последовательность Pairs, где первым элементом в Pair является index, а вторым элементом является сам element коллекции.

Перечисление полезно, когда мы хотим получить доступ к позиции вместе с любой итерацией, фильтрацией или даже сопоставлением объектов коллекции.

Давайте сначала посмотрим на его определение.

/* Returns a sequence of pairs (*n*, *x*), where *n* represents a consecutive integer starting at zero and *x* represents an element of the sequence. */
@inlinable public func enumerated() -> EnumeratedSequence<Array<Element>>

Перечисленный лучший вариант использования - с массивом.

let array = [1, 2, 3, 4, 5]
for (index, item) in array.enumerated() {
    print("Item at \(index) is \(item)")
}

Его также можно использовать с set и map, но порядок вставки не гарантируется как в set, так и в map.

let set = [1, 2, 3, 4, 5]
for (index, item) in set.enumerated() {
    print("Item at \(index) is \(item)")
}
let map = [1: "One", 2: "Two", 3: "Three"]
for (index, item) in map.enumerated() {
    print("Item at \(index) is key: \(item.key) value: \(item.value)")
}

Перечисление также можно использовать для перебора строки с последовательностью пар индекса и соответствующего символа по этому индексу.

for (index, item) in "Swift".enumerated() {
    print("Item at \(index) is \(item)")
}
//this will print
Item at 0 is S
Item at 1 is w
Item at 2 is i
Item at 3 is f
Item at 4 is t

Нет необходимости сначала преобразовывать строку в массив символов, а затем перебирать ее. Функция Enumerated позаботится об этом.