Sobes.tech
Junior — Middle

Kas saaksite anda näidet, millal Swiftis kasutatakse `unowned` operaatorit?

sobes.tech AI

Vastus AI-lt

Swiftis kasutatakse unowned operaatorit nõrga viitamise deklaratsiooniks, mis ei ole valikuline ja eeldab, et viidatud objekt on alati olemas juurdepääsu ajal. See on kasulik tugevate viitamise tsüklite vältimiseks, näiteks sulgude või vastastikku viitavate objektide puhul, kui üks objektidest garanteerib, et ta elab kauem kui teine.

Näide unowned kasutamisest sulgus:

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) elab korteris \(apt.number)")
        } else {
            print("\(self.name) ei oma korterit")
        }
    }
}

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() // Tulem: John elab korteris 101

Siin kasutatakse unowned viidet Apartment-st Person-ile, et vältida tugevaid viite tsükleid, eeldades, et Person elab kauem kui Apartment.