> Будет ли ошибка при передаче non-escaping closure дальше и почему? (iOS, Swift)

Уровень: senior · Роль: mobile · Категория: Технические вопросы

Компании: Doubletapp

Стек: iOS, Swift

> Пример ответа

Да, будет ошибка компиляции. Non-escaping замыкание (closure) по умолчанию в Swift считается не сохраняющимся - оно выполняется синхронно внутри тела функции и не может быть сохранено для последующего вызова. Если попытаться передать такое замыкание в другую функцию, которая ожидает escaping-замыкание (например, сохранить его в свойство, передать в асинхронный колбэк или в другую функцию с @escaping), компилятор выдаст ошибку: "Closure use of non-escaping parameter may allow it to escape".

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

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью