Выбор ответа Junior Замыкания и захват спрашивают часто обновлено
Список захвата замыкания
Вопрос
Чем { [count] in print(count) } отличается от { print(count) } для var count?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Список захвата копирует значение count при создании замыкания. Без списка замыкание видит текущее значение переменной в момент вызова. [count] делает константную копию в момент создания.
Варианты ответа
- Ничем, это лишь стиль: оба варианта видят текущее значение
count - Список захвата копирует значение
countпри создании замыканияправильный ответ - Список захвата делает
countслабой ссылкой внутри замыкания - Список захвата запрещает менять
countснаружи после создания
Разбор
Без списка замыкание видит текущее значение переменной в момент вызова. [count] делает константную копию в момент создания. Слабым захват становится только с weak, и это касается ссылок на классы. Менять исходную переменную снаружи по-прежнему можно, просто замыкание этого не увидит.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Замыкания и захват»
- Зачем нужен @autoclosure
- Escaping-замыкание и mutating self
- Почему non-escaping замыкания дешевле
- Сокращённый синтаксис замыканий в Swift
- Паттерн weak self в замыкании
- Неявный self в escaping-замыкании
- Задача на Swift: debounce для поиска
- Задача на Swift: сортировка контактов по нескольким полям