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.