Sobes.tech
Junior — Middle

Czy możesz podać przykład, kiedy w kodzie Swift używany jest operator `unowned`?

sobes.tech AI

Odpowiedź od AI

Operator unowned w Swift służy do deklarowania słabej referencji, która nie jest opcjonalna i zakłada, że obiekt, na który się odnosi, zawsze istnieje podczas dostępu. Jest to przydatne do zapobiegania cyklom silnych referencji, na przykład podczas pracy z zamknięciami lub obiektami odwołującymi się do siebie nawzajem, gdy jeden z obiektów gwarantuje dłuższe życie niż drugi.

Przykład użycia unowned w zamknięciu:

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) mieszka w mieszkaniu \(apt.number)")
        } else {
            print("\(self.name) nie ma mieszkania")
        }
    }
}

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() // Wypisze: John mieszka w mieszkaniu 101

Tutaj, unowned jest używany do odniesienia z Apartment do Person, aby uniknąć cyklu silnych referencji, zakładając, że Person żyje dłużej niż Apartment.