Junior — Middle
Μπορείτε να δώσετε ένα παράδειγμα όπου χρησιμοποιείται ο τελεστής `unowned` στον κώδικα Swift;
sobes.tech AI
Απάντηση από AI
Ο τελεστής unowned στο Swift χρησιμοποιείται για να δηλώσει μια μη-προαιρετική ασθενή αναφορά που υποθέτει ότι το αντικείμενο στο οποίο αναφέρεται υπάρχει πάντα κατά τη διάρκεια της πρόσβασης. Αυτό είναι χρήσιμο για την αποφυγή κύκλων ισχυρών αναφορών, για παράδειγμα, όταν εργάζεστε με κλεισίματα ή αντικείμενα που αναφέρονται το ένα στο άλλο, όταν ένα από τα αντικείμενα εγγυάται ότι θα ζει περισσότερο από το άλλο.
Παράδειγμα χρήσης του unowned σε ένα κλείσιμο:
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) ζει σε διαμέρισμα \(apt.number)")
} else {
print("\(self.name) δεν έχει διαμέρισμα")
}
}
}
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() // Θα εμφανίσει: John ζει σε διαμέρισμα 101
Εδώ, το unowned χρησιμοποιείται για την αναφορά από το Apartment στο Person, για να αποφευχθεί ένας κύκλος ισχυρών αναφορών, υποθέτοντας ότι το Person ζει περισσότερο από το Apartment.