Sobes.tech
Junior — Middle

Můžete uvést příklad, kdy se v kódu Swift používá operátor `unowned`?

sobes.tech AI

Odpověď od AI

Operátor unowned v jazyce Swift se používá k deklaraci slabé reference, která není volitelná a předpokládá, že objekt, na který odkazuje, vždy existuje během přístupu. To je užitečné pro prevenci silných referenčních cyklů, například při práci s uzávěry nebo objekty, které se vzájemně odkazují, když je zaručeno, že jeden z objektů žije déle než druhý.

Příklad použití unowned v uzávěru:

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 bytě \(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 bytě 101

Zde je unowned použit pro odkaz z Apartment na Person, aby se zabránilo silnému referenčnímu cyklu, předpokládá se, že Person žije déle než Apartment.