0Pricing
Swift Academy · Урок

Как работает defer

Выполняйте код при выходе из области видимости независимо от пути выполнения.

«Как работает defer» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Что делает defer

Блок defer планирует выполнение кода перед выходом из текущей области действия, независимо от способа выхода.

func demo() {
    defer { print("cleanup") }
    print("work")
}
demo()

Выполнение при выходе из области действия

Отложенный код выполняется после завершения остальной части области действия, непосредственно перед выходом из неё.

func greet() {
    defer { print("goodbye") }
    print("hello")
}
greet()

Отложенное выполнение после обычного потока

Даже если есть несколько инструкций, тело defer выполняется последним.

func process() {
    defer { print("3 deferred") }
    print("1 start")
    print("2 middle")
}
process()

defer внутри цикла

Блок defer внутри тела цикла выполняется в конце каждой итерации.

for i in 1...3 {
    defer { print("end of iteration", i) }
    print("start of iteration", i)
}

defer внутри условного блока

Область видимости может быть любым блоком. defer в условном блоке выполняется при завершении этого блока.

func check(_ flag: Bool) {
    if flag {
        defer { print("leaving if block") }
        print("inside if")
    }
    print("after if")
}
check(true)

Захват текущих значений

Отложенный блок захватывает переменные по ссылке, поэтому видит их значения в момент выполнения.

func counterDemo() {
    var count = 0
    defer { print("final count:", count) }
    count = 5
}
counterDemo()

defer не откладывает выполнение

defer не выполняется асинхронно. Он выполняется синхронно при выходе из области видимости, до возврата функции к вызывающему коду.

func order() {
    defer { print("B") }
    print("A")
}
order()
print("C")

Распространённый случай: настройка и освобождение

Размещайте освобождение ресурсов сразу рядом с настройкой, чтобы они оставались визуально и логически связанными.

func session() {
    print("open session")
    defer { print("close session") }
    print("do work")
}
session()

defer в блоке выполнения

defer внутри блока do выполняется при выходе из этого блока.

func run() {
    do {
        defer { print("do block cleanup") }
        print("inside do")
    }
    print("after do")
}
run()

Несколько инструкций в defer

Блок defer может содержать несколько инструкций; все они выполняются вместе при выходе из области видимости.

func multi() {
    defer {
        print("step 1 of cleanup")
        print("step 2 of cleanup")
    }
    print("main work")
}
multi()

Зачем использовать defer

defer гарантирует выполнение очистки независимо от того, как завершается область видимости, и снижает вероятность забыть о ней на каком-либо пути выполнения.

func guaranteed() {
    defer { print("always runs") }
    print("body")
}
guaranteed()

Быстрая проверка

Проверьте время выполнения defer.

Итоги

defer планирует выполнение кода в конце текущей области видимости независимо от способа выхода из неё. Он выполняется синхронно, последним в области видимости и идеально подходит для размещения освобождения ресурсов рядом с настройкой.

func demo() {
    defer { print("last") }
    print("first")
}
demo()

Часто задаваемые вопросы

Урок «Как работает defer» бесплатный?

Да — полный текст урока «Как работает defer» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «Как работает defer»?

Выполняйте код при выходе из области видимости независимо от пути выполнения. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Как работает defer»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Как работает defer
  2. Порядок выполнения нескольких блоков defer
  3. defer для освобождения ресурсов
  4. defer с ошибками и ранним возвратом
← Назад к Swift Academy