Sobes.tech
Junior — Middle

Ar galite pateikti pavyzdį, kada Swift kode naudojamas `unowned` operatorius?

sobes.tech AI

Atsakymas iš AI

Swift'e unowned operatorius naudojamas deklaruoti silpną nuorodą, kuri nėra pasirinktinė ir daro prielaidą, kad objektas, į kurį ji nuoroda, visada egzistuoja prieigos metu. Tai naudinga siekiant išvengti stiprių nuorodų ciklų, pavyzdžiui, dirbant su uždarymais arba tarpusavyje susijusiais objektais, kai vienas iš objektų garantuoja, kad jis gyvens ilgiau nei kitas.

unowned naudojimo pavyzdys uždaryme:

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) gyvena bute \(apt.number)")
        } else {
            print("\(self.name) neturi buto")
        }
    }
}

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() // Rezultatas: John gyvena bute 101

Čia unowned naudojamas nuorodai iš Apartment į Person, siekiant išvengti stiprių nuorodų ciklų, daroma prielaida, kad Person gyvens ilgiau nei Apartment.