Sobes.tech
Junior — Middle

Môžete uviesť príklad, kedy sa v kóde Swift používa operátor `unowned`?

sobes.tech AI

Odpoveď od AI

Operátor unowned v jazyce Swift se používa na deklaraci slabé reference, která není volitelná a předpokládá, že objekt, na ktorý odkazuje, vždy existuje počas prístupu. To je užitočné na prevenciu silných referenčných cyklov, napríklad pri práci s uzávermi alebo objekty, ktoré sa navzájom odkazujú, keď je garantované, že jeden z objektov žije dlhšie ako druhý.

Príklad použitia unowned v uzávere:

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) žije v byte \(apt.number)")
        } else {
            print("\(self.name) nemá byt")
        }
    }
}

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() // Výstup: John žije v byte 101

Tu sa unowned používa na odkaz z Apartment na Person, aby sa predišlo cyklu silných referencií, predpokladá sa, že Person žije dlhšie ako Apartment.