Sobes.tech
Junior — Middle

შეგიძლიათ მიაწოდოთ მაგალითი, როდის გამოიყენება `unowned` ოპერატორი Swift-ის კოდში?

sobes.tech AI

პასუხი AI-სგან

Swift-ში unowned ოპერატორი გამოიყენება სუსტი მითითების გამოცხადებისთვის, რომელიც არ არის ვარიანტული და ვარაუდობს, რომ ის ობიექტი, რომელსაც ის ეხება, ყოველთვის არსებობს წვდომის დროს. ეს სასარგებლოა ძლიერი მითითების ციკლების თავიდან ასაცილებლად, მაგალითად, დახურვებთან ან ურთიერთმიმართავ ობიექტებთან მუშაობისას, როდესაც ერთ-ერთი ობიექტი გარანტირებულია, რომ უფრო ხანგრძლივია ვიდრე მეორე.

unowned გამოყენების მაგალითი დახურვაში:

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) ცხოვრობს ბინაში \(apt.number)")
        } else {
            print("\(self.name) ბინა არ აქვს")
        }
    }
}

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() // შედეგი: John ცხოვრობს ბინაში 101

აქ, unowned გამოიყენება Apartment-დან Person-ზე მითითებისთვის, რათა თავიდან აიცილოს ძლიერი მითითების ციკლი, და ვარაუდია, რომ Person უფრო ხანგრძლივია ვიდრე Apartment.