Sobes.tech
Junior — Middle

Pouvez-vous donner un exemple où l'opérateur `unowned` est utilisé dans le code Swift ?

sobes.tech IA

Réponse de l'IA

L'opérateur unowned en Swift est utilisé pour déclarer une référence faible qui n'est pas optionnelle et suppose que l'objet auquel elle fait référence existe toujours lors de l'accès. Cela est utile pour éviter les cycles de références fortes, par exemple lors de l'utilisation de closures ou d'objets qui se réfèrent mutuellement, lorsqu'un des objets garantit vivre plus longtemps que l'autre.

Exemple d'utilisation de unowned dans une closure:

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) vit dans l'appartement \(apt.number)")
        } else {
            print("\(self.name) n'a pas d'appartement")
        }
    }
}

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() // Affichera: John vit dans l'appartement 101

Ici, unowned est utilisé pour la référence de Apartment à Person, afin d'éviter un cycle de références fortes, en supposant que Person vit plus longtemps que Apartment.