defer en Swift: código que siempre se ejecuta al salir del scope

Múltiples defer en el mismo scope se ejecutan en orden inverso al de su declaración (último en entrar, primero en salir):

func demo() {
    defer { print("Ultimo defer: 3") }
    defer { print("Segundo defer: 2") }
    defer { print("Primer defer: 1") }
    print("Cuerpo de la funcion")
}
demo()
// Cuerpo de la funcion
// Primer defer: 1
// Segundo defer: 2
// Ultimo defer: 3

defer con locks y recursos

class Cache {
    private var datos: [String: String] = [:]
    private let lock = NSLock()

    func obtener(_ clave: String) -> String? {
        lock.lock()
        defer { lock.unlock() }  // siempre se desbloquea
        return datos[clave]
    }

    func guardar(_ valor: String, para clave: String) {
        lock.lock()
        defer { lock.unlock() }
        datos[clave] = valor
    }
}

defer para logging y métricas

func operacionCritica() throws {
    let inicio = Date()
    defer {
        let duracion = Date().timeIntervalSince(inicio)
        print("Duracion: (duracion)s")
    }
    // ... operacion
    throw NSError(domain: "test", code: 1)
    // el defer se ejecuta aunque se lance error
}

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP