Sobes.tech
Junior — Middle

¿Puede dar un ejemplo de cuándo se usa el operador `unowned` en Swift en el código?

sobes.tech AI

Respuesta de la IA

El operador unowned en Swift se utiliza para declarar una referencia débil que no es opcional y asume que el objeto al que hace referencia siempre existe durante el acceso. Esto es útil para prevenir ciclos de referencias fuertes, por ejemplo, al trabajar con cierres o objetos que se refieren mutuamente, cuando uno de los objetos garantiza vivir más que el otro.

Ejemplo de uso de unowned en un cierre:

class Person {
    let name: String
    var apartment: Apartment?

    init(name: String) {
        self.name = name
    }

    lazy var printApartment = { [unowned self] in
        if let apt = self.apartment {
            print("\(self.name) vive en el apartamento \(apt.number)")
        } else {
            print("\(self.name) no tiene apartamento")
        }
    }
}

class Apartment {
    let number: Int
    unowned let tenant: Person

    init(number: Int, tenant: Person) {
        self.number = number
        self.tenant = tenant
    }
}

let john = Person(name: "John")
let apt1 = Apartment(number: 101, tenant: john)
john.apartment = apt1

john.printApartment() // Imprimirá: John vive en el apartamento 101

Aquí, unowned se usa para la referencia desde Apartment a Person, para evitar un ciclo de referencias fuertes, asumiendo que Person vive más que Apartment.