> Будет ли ошибка при передаче 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 замыкание имеет строгий жизненный цикл - оно существует только во время вызова функции. Передача его за пределы этой области нарушает гарантии безопасности памяти и может привести к висячим ссылкам или неопределенному поведению. Компилятор защищает от этого на этапе компиляции.
> Похожие задачи по mobile
Для чего используется @State в SwiftUI?
Что такое side table в iOS и какую проблему она решает?
С какими основными свойствами работают у UIView в iOS?
Что такое UIViewController и за что он отвечает в iOS?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью