Sobes.tech
Назад к вопросам
Junior — Middle
66

Можете привести пример, когда в коде используется оператор `unowned` в Swift?

Компании, где спрашивали
Разумные решенияРазумные решения
DNSDNS
Альфа-БанкАльфа-Банк

Ответ от нейросети

sobes.tech 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) lives in apartment \(apt.number)")
        } else {
            print("\(self.name) has no apartment")
        }
    }
}

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 lives in apartment 101

Здесь unowned используется для ссылки из Apartment на Person, чтобы избежать цикла сильных ссылок, при этом предполагается, что Person живет дольше Apartment.