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

Что выведет Swift: счётчик на замыкании

Вопрос

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

func makeCounter() -> () -> Int {
    var n = 0
    return {
        n += 1
        return n
    }
}

let a = makeCounter()
let b = a
let c = makeCounter()
print(a(), a(), b(), c())

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

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

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

Коротко

Код выведет: 1 2 3 1. Каждый вызов makeCounter создаёт свою переменную n в куче. b это та же ссылка на замыкание, что и a, поэтому счёт продолжается: 3. c новый счётчик.

Что выведет

1 2 3 1

Разбор

Каждый вызов makeCounter создаёт свою переменную n в куче. b это та же ссылка на замыкание, что и a, поэтому счёт продолжается: 3. c новый счётчик.

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

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