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.