Оператор defer планирует выполнение блока кода непосредственно перед выходом из текущей области видимости, независимо от того, как этот выход происходит — через обычный return, throw или break.
defer выполняются в обратном порядке (последний определённый выполняется первым)func processFile() throws {
let file = openFile("data.txt")
defer { file.close() } // всегда выполняется, что бы ни происходило ниже
let lock = acquireLock()
defer { lock.release() } // выполняется предпоследним
try performRiskyOperation(file)
} // lock.release() выполняется первым, затем file.close()
Использование defer гарантирует, что очистка ресурсов никогда не будет случайно пропущена, даже в сложных управляющих потоках с несколькими точками выхода. Это делает код безопаснее и проще в поддержке, связывая захват и освобождение ресурсов в одном логическом месте.
Когда в одной области видимости присутствует несколько defer блоков, они выполняются в том порядке, в котором были определены, причём первый определённый блок запускается первым.
Новый — ещё не проверен сообществом
Вы