Sobes.tech
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.