Выбор ответа Junior Замыкания и захват спрашивают часто обновлено
Что значит @escaping
Вопрос
Когда параметр-замыкание нужно пометить @escaping?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Когда замыкание может быть вызвано после возврата из функции. Замыкания-параметры по умолчанию non-escaping: компилятор знает, что они не переживут вызов, и может не выделять для них память в куче.
Варианты ответа
- Когда замыкание бросает ошибки, иначе их нельзя пробросить наружу
- Когда замыкание захватывает
selfкласса или структуры - Когда замыкание может быть вызвано после возврата из функцииправильный ответ
- Всегда, если функция объявлена
publicи видна из других модулей
Разбор
Замыкания-параметры по умолчанию non-escaping: компилятор знает, что они не переживут вызов, и может не выделять для них память в куче. Если замыкание сохраняется или вызывается позже (completion handler сетевого запроса), нужен @escaping. Для бросающих замыканий есть throws. Захват self не требует @escaping, наоборот, в escaping-замыкании класса self надо писать явно. Публичность ни при чём.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Замыкания и захват»
- Зачем нужен @autoclosure
- Захват переменной замыканием в Swift
- Почему non-escaping замыкания дешевле
- Сокращённый синтаксис замыканий в Swift
- Паттерн weak self в замыкании
- Неявный self в escaping-замыкании
- Задача на Swift: debounce для поиска
- Задача на Swift: сортировка контактов по нескольким полям