Будет напечатано 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 здесь синхронно обходит массив и вызывает каждый элемент. Замыкания захватывают изменяемую переменную, а не независимые копии её начального значения. Никакой конкурентности в этом фрагменте нет, поэтому результат детерминирован. Перенос выполнения в параллельные задачи потребовал бы отдельной защиты состояния.