Sobes.tech
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.