Выбор ответа Junior Замыкания и захват спрашивают часто обновлено

Что значит @escaping

Вопрос

Когда параметр-замыкание нужно пометить @escaping?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: Когда замыкание может быть вызвано после возврата из функции. Замыкания-параметры по умолчанию non-escaping: компилятор знает, что они не переживут вызов, и может не выделять для них память в куче.

Варианты ответа

  1. Когда замыкание бросает ошибки, иначе их нельзя пробросить наружу
  2. Когда замыкание захватывает self класса или структуры
  3. Когда замыкание может быть вызвано после возврата из функцииправильный ответ
  4. Всегда, если функция объявлена public и видна из других модулей

Разбор

Замыкания-параметры по умолчанию non-escaping: компилятор знает, что они не переживут вызов, и может не выделять для них память в куче. Если замыкание сохраняется или вызывается позже (completion handler сетевого запроса), нужен @escaping. Для бросающих замыканий есть throws. Захват self не требует @escaping, наоборот, в escaping-замыкании класса self надо писать явно. Публичность ни при чём.

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

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