Что появится в консоли после вызова цепочки замыканий

Будет напечатано 6: все три замыкания последовательно меняют одну и ту же переменную total.

Короткий ответ

Что ответить на собеседовании

Будет напечатано 6: все три замыкания последовательно меняют одну и ту же переменную total.

Подробный разбор

Ответ с пояснениями

Условие

Вопрос: какое значение будет выведено в консоль после выполнения всех замыканий?

var total = 0
let actions = [ { total += 1 }, { total += 2 }, { total += 3 } ]

actions.forEach { $0() }
print(total)

Объясните, как изменяется переменная total при последовательных вызовах замыканий и какое число будет напечатано.

Ответ

Будет напечатано 6: все три замыкания последовательно меняют одну и ту же переменную total.

После первого вызова total равен 1, после второго — 3, после третьего — 6. forEach здесь синхронно обходит массив и вызывает каждый элемент. Замыкания захватывают изменяемую переменную, а не независимые копии её начального значения. Никакой конкурентности в этом фрагменте нет, поэтому результат детерминирован. Перенос выполнения в параллельные задачи потребовал бы отдельной защиты состояния.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее