Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Swift : closure, escaping, asynchronous, swift

В чём разница между escaping и non-escaping замыканиями?

Проверяет знание управления временем жизни замыканий и как это влияет на архитектуру кода.

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

Non-escaping замыкания выполняются сразу внутри функции. Escaping замыкания сохраняются и вызываются позже, например, после завершения асинхронной операции. Escaping требует явной аннотации @escaping.

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

Non-escaping:

  • Выполняется до окончания функции.

  • Нет необходимости явно помечать.

Escaping:

  • Замыкание выходит за пределы функции и может быть вызвано позже.

  • Используется в асинхронных API.

  • Требует @escaping.

Пример:

// Escaping
func loadData(completion: @escaping () -> Void) {
    	DispatchQueue.global().async {
        	// что-то делаем
        	completion()
    	}
}
// Non-escaping
func doWork(action: () -> Void) {
    	action()
}

Когда использовать:

  • @escaping нужен при работе с API, таймерами, асинхронным кодом.

  • Без @escaping — для простых вызовов внутри функции.

  • Аватар

    iOS Guru

    Roman Isakov

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

Уровень

  • Рейтинг:

    2

  • Сложность:

    7

Навыки

  • Swift

    Swift

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

#closure

#escaping

#asynchronous

#swift

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

  • Аватар

    iOS Guru

    Roman Isakov

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