Какой результат появится в консоли (пример 3)

Результат равен 6: замыкания увеличивают общий counter на 1, затем на 2 и на 3.

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

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

Результат равен 6: замыкания увеличивают общий counter на 1, затем на 2 и на 3.

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

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

Условие

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


var counter = 0
let closures = [ { counter += 1 }, { counter += 2 }, { counter += 3 } ]

closures.forEach { $0() }
print(counter)  

Ответ

Результат равен 6: замыкания увеличивают общий counter на 1, затем на 2 и на 3.

Все элементы массива обращаются к одной изменяемой переменной counter. forEach выполняет вызовы последовательно: значения становятся 1, 3, 6. Здесь нет ни асинхронного запуска, ни capture list, фиксирующего отдельные снимки. Поэтому утверждение, что каждое замыкание начинает с исходного нуля, неверно. При параллельном выполнении такой доступ уже потребовал бы синхронизации, но исходный код параллельным не является.

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

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

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

Подробнее