Sobes.tech
Junior — Middle

Можете ли да дате пример када се у коду Swift користи оператор `unowned`?

sobes.tech АИ

Одговор од АИ

Operator unowned u Swift-u se koristi za deklarisanje slabog referencnog pokazivača koji nije opcionalan i pretpostavlja da objekat na koji se odnosi uvek postoji tokom pristupa. Ovo je korisno za sprečavanje cikličnih jakih referenci, na primer, prilikom rada sa zatvaranjima ili međusobno referenciranim objektima, kada je garantovano da jedan od objekata živi duže od drugog.

Primer korišćenja unowned u zatvaranju:

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) živi u stanu \(apt.number)")
        } else {
            print("\(self.name) nema stan")
        }
    }
}

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() // Ispisaće: John živi u stanu 101

Ovde, unowned se koristi za referencu iz Apartment na Person, kako bi se izbegao ciklus jakih referenci, pretpostavljajući da Person živi duže od Apartment.