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()
/*
გამოყვანა:
მძიმე რესურსზე წვდომა...
რესურსი ხელმისაწვდომია
*/