Назад к вопросам
JuniorТеорияЧасто
Что выведет программа?
func makeCounter() -> () -> Int {
var count = 0
return {
count += 1
return count
}
}
let c1 = makeCounter()
let c2 = c1
print(c1(), c2(), c1())1 2 3
- Ждать
1 1 2, считая, чтоlet c2 = c1копирует замыкание, как копировал бы массив. Оба имени ведут к одному замыканию, поэтомуcountу них одна. - Ждать
1 1 1, считая, чтоvar count = 0выполняется при каждом вызове. Оно выполняется один раз, при вызовеmakeCounter, и замыкание держит эту переменную.
- Что выведет программа, если
c2— это второй вызовmakeCounter()? - Почему замыкание может менять
count, хотяc1— константаlet?