Sobes.tech
Junior — Middle

Tudna példát mondani arra, mikor használják az `unowned` operátort Swift-ben?

sobes.tech MI

Válasz az MI-től

A unowned operátor Swiftben egy nem opcionális gyenge hivatkozást deklarál, amely feltételezi, hogy a rá mutató objektum mindig létezik az elérés során. Ez hasznos a erős hivatkozási ciklusok elkerülésében, például zárványok vagy kölcsönösen hivatkozó objektumok esetén, amikor az egyik objektum garantáltan hosszabb ideig él, mint a másik.

Példa a unowned használatára zárványban:

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) azonosítójú személy az \(apt.number) számú lakásban él")
        } else {
            print("\(self.name) nem rendelkezik lakással")
        }
    }
}

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() // Kimenet: John azonosítójú személy az 101 számú lakásban él

Itt az unowned a Apartment-ből a Person-re mutató hivatkozásnál van használva, hogy elkerüljük az erős hivatkozási ciklust, feltételezve, hogy a Person hosszabb ideig él, mint az Apartment.