Выбор ответа Middle Замыкания и захват обновлено
Опциональное замыкание-параметр и @escaping
Вопрос
Почему у параметра completion: (() -> Void)? нельзя написать @escaping?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Опциональное замыкание уже неявно escaping: оно хранится внутри Optional. Атрибут @escaping применим только к параметру функционального типа.
Варианты ответа
- Опциональные замыкания всегда non-escaping, и атрибут им противоречит
@escapingздесь пишется после?:(() -> Void)? @escaping- Опциональные замыкания в параметрах функций в Swift запрещены
- Опциональное замыкание уже неявно escaping: оно хранится внутри
Optionalправильный ответ
Разбор
Атрибут @escaping применим только к параметру функционального типа. (() -> Void)? это Optional<() -> Void>, и замыкание внутри него считается escaping автоматически. Отсюда ловушка: опциональное замыкание всегда escaping, и при захвате self в классе требуется явный self. Такой синтаксис не запрещён, а @escaping после ? не пишется.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.