Назад к вопросам
Разумные решения
DNS
Альфа-Банк
Junior — Middle
66
Можете привести пример, когда в коде используется оператор `unowned` в Swift?
Компании, где спрашивали
Ответ от нейросети
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.