Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Swift : closure, escaping, nonescaping, capture

Зачем нужен модификатор @escaping для замыканий?

Вопрос проверяет понимание области жизни замыканий и необходимости пометить их как «убегающие» из текущей функции.

Короткий ответ

Если замыкание сохраняется вне тела функции (например, присваивается свойству или ставится в очередь), то оно «убегает» из области и выполняется позже — такое замыкание помечают @escaping. Это даёт понять компилятору, что нужно захватить переменные должным образом и управлять временем жизни замыкания.

Длинный ответ

Неотслеживаемое (non-escaping):

  • Замыкание выполняется внутри вызова функции и сразу уходит из стека после возвращения.

Убегающее (@escaping):

  • Замыкание сохраняется в свойстве, передаётся в асинхронный API или GCD.

  • Оно может выполняться позже, после выхода из функции.

Пример:

var completions: [() -> Void] = []

func doSomething(completion: @escaping () -> Void) {
    	completions.append(completion) // сохраняем
}

doSomething {
    	print("Done")
}
// Вызовем позже:
completions.forEach { $0() }

Зачем требуется маркировка:

  • Компилятор вставляет захват self как strong или weak в зависимости от контекста.

  • Без @escaping нельзя сохранить замыкание, и компилятор выдаст ошибку.

Вывод:
@escaping явно обозначает, что замыкание живёт дольше тела функции и будет вызвано позже, что важно для правильного управления памятью и захватов.

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    6

Навыки

  • Swift

    Swift

Ключевые слова

#closure

#escaping

#nonescaping

#capture

Подпишись на iOS Developer в телеграм

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.