Junior — Middle
Pode dar um exemplo de quando o operador `unowned` é usado em Swift?
sobes.tech IA
Resposta da IA
O operador unowned em Swift é usado para declarar uma referência fraca que não é opcional e assume que o objeto ao qual se refere existe sempre durante o acesso. Isto é útil para evitar ciclos de referências fortes, por exemplo, ao trabalhar com closures ou objetos que se referenciam mutuamente, quando um dos objetos garante viver mais do que o outro.
Exemplo de uso de unowned numa closure:
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) vive no apartamento \(apt.number)")
} else {
print("\(self.name) não tem apartamento")
}
}
}
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() // Vai imprimir: John vive no apartamento 101
Aqui, unowned é usado para a referência de Apartment a Person, para evitar um ciclo de referências fortes, assumindo que Person vive mais do que Apartment.