Свифт для циклов работает немного иначе, чем вы думаете.
Прежде всего обратите внимание, что бит после in
оценивается только один раз.Он не получает счетчик массива в каждой итерации.0..<array.count
может быть полностью заменено на 0..<5
, и результат не будет отличаться.
Во-вторых, даже если вы установите i
в цикле, значение i
не будетзначение, которое вы установите в следующей итерации.Это связано с тем, что в начале каждой итерации i
назначается следующий элемент в последовательности.Это означает, что независимо от того, что вы присваиваете i
, i
будет хранить это значение только до конца текущей итерации.
Теперь мы можем объяснить вывод.
Первая итерация,i
равно 0, поэтому элемент с индексом 0 печатается.1-й элемент удален.Массив теперь ["2", "3", "4", "5"]
.
Вторая итерация, i
равно 1, поэтому печатается элемент с индексом 1 (3
).2-й элемент удален.Массив теперь ["2", "4", "5"]
.
Третья итерация, i
равно 2, поэтому печатается элемент с индексом 2 (5
).3-й элемент удален.Массив теперь ["2", "4"]
.
Четвертая итерация, i
равна 3, но длина массива составляет всего 2 элемента, поэтому индекс выходит за пределы диапазона.