Junior — Middle
Ar galite pateikti pavyzdį, kada Swift kode naudojamas `unowned` operatorius?
sobes.tech AI
Atsakymas iš AI
Swift'e unowned operatorius naudojamas deklaruoti silpną nuorodą, kuri nėra pasirinktinė ir daro prielaidą, kad objektas, į kurį ji nuoroda, visada egzistuoja prieigos metu. Tai naudinga siekiant išvengti stiprių nuorodų ciklų, pavyzdžiui, dirbant su uždarymais arba tarpusavyje susijusiais objektais, kai vienas iš objektų garantuoja, kad jis gyvens ilgiau nei kitas.
unowned naudojimo pavyzdys uždaryme:
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) gyvena bute \(apt.number)")
} else {
print("\(self.name) neturi buto")
}
}
}
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() // Rezultatas: John gyvena bute 101
Čia unowned naudojamas nuorodai iš Apartment į Person, siekiant išvengti stiprių nuorodų ciklų, daroma prielaida, kad Person gyvens ilgiau nei Apartment.