Как работает 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 — локальная установка не требуется.
Все уроки этого курса
- Как работает defer
- Порядок выполнения нескольких блоков defer
- defer для освобождения ресурсов
- defer с ошибками и ранним возвратом