Что выведет код Middle Замыкания и захват обновлено

Что выведет Swift: замыкания в for-in и while

Вопрос

Что выведет код?

var handlers: [() -> Void] = []
for i in 1...3 {
    handlers.append { print(i, terminator: " ") }
}
var j = 0
while j < 3 {
    j += 1
    handlers.append { print(j, terminator: " ") }
}
handlers.forEach { $0() }
print()

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: 1 2 3 3 3 3. В for-in у каждой итерации своя константа i.

Что выведет

1 2 3 3 3 3

Разбор

В for-in у каждой итерации своя константа i. В while все три замыкания захватили одну внешнюю переменную j, к моменту вызова она равна 3.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.