Sobes.tech
Junior

რა არის lazy?

sobes.tech AI

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

lazy საკვანძო სიტყვა გამოიყენება თვისების დაგვიანებული ინიციალიზაციისთვის.

lazy თვისება ინიციალიზდება მხოლოდ მის პირველ შეყვანაზე. ეს სასარგებლოა:

  • შესრულების თვალსაზრისით: თუ ობიექტის შექმნა მოითხოვს ბევრ რესურსს, მაგრამ არ არის ყოველთვის საჭირო.
  • ციკლური დამოკიდებულებების თავიდან აცილება ინიციალიზაციის დროს.
  • მუშაობა გარე რესურსებთან ან მონაცემებთან, რომლებიც შეიძლება არ იყოს ხელმისაწვდომი ობიექტის შექმნის დროს.

lazy თვისებები უნდა იყოს:

  • ცვლადები (var), რადგან მათი მნიშვნელობა შეიძლება შეიცვალოს პირველ შეყვანაზე.
  • არ უნდა ჰქონდეთ თვისების თვალსაზრისით გამგზავნები (willSet, didSet) პირველ შეყვანამდე.
class HeavyResource {
    init() {
        print("მძიმე რესურსი ინიციალიზდა")
        // ძვირი ინიციალიზაციის სიმულაცია
        Thread.sleep(forTimeInterval: 1)
    }
}

class MyPresenter {
    let name = "პრეზენტატორი"

    // `lazy` თვისება, ინიციალიზდება პირველ გამოყენებაზე
    lazy var heavyResource: HeavyResource = {
        print("მძიმე რესურსის შექმნა")
        return HeavyResource()
    }()

    init() {
        print("\(name) ინიციალიზდა")
    }

    func accessResource() {
        print("მძიმე რესურსზე წვდომა...")
        _ = heavyResource // აქ ხდება `lazy` თვისების ინიციალიზაცია
        print("რესურსი ხელმისაწვდომია")
    }
}

// პრეზენტატორის ინიციალიზაცია
let presenter = MyPresenter() // გამოყვანა: პრეზენტატორი ინიციალიზდა

// რესურსზე წვდომა მოგვიანებით, როდესაც ის ნამდვილად სჭირდება
presenter.accessResource()
/*
გამოყვანა:
მძიმე რესურსზე წვდომა...
მძიმე რესურსის შექმნა
მძიმე რესურსი ინიციალიზდა
რესურსი ხელმისაწვდომია
*/

// განმეორებითი წვდომა არ იწვევს ახალი ინიციალიზაციას
presenter.accessResource()
/*
გამოყვანა:
მძიმე რესურსზე წვდომა...
რესურსი ხელმისაწვდომია
*/