Junior — Middle
Puteți oferi un exemplu în care operatorul `unowned` este utilizat în codul Swift?
sobes.tech AI
Răspuns de la AI
Operatorul unowned în Swift este utilizat pentru a declara o referință slabă care nu este opțională și presupune că obiectul la care face referire există întotdeauna în timpul accesului. Acest lucru este util pentru prevenirea ciclurilor de referințe puternice, de exemplu, atunci când lucrați cu closures sau obiecte care se referă reciproc, atunci când unul dintre obiecte garantează că va trăi mai mult decât celălalt.
Exemplu de utilizare a unowned într-un 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) locuiește în apartament \(apt.number)")
} else {
print("\(self.name) nu are apartament")
}
}
}
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() // Va afișa: John locuiește în apartament 101
Aici, unowned este folosit pentru referința de la Apartment la Person, pentru a evita un ciclu de referințe puternice, presupunând că Person trăiește mai mult decât Apartment.