Junior
Какво е lazy?
sobes.tech AI
Отговор от AI
Ключовата дума lazy се използва за отложена инициализация на свойство.
Свойство с lazy се инициализира само при първия му достъп. Това е полезно за:
- Производителност: ако създаването на обекта изисква много ресурси, но не винаги е необходимо.
- Избягване на циклични зависимости по време на инициализация.
- Работа с външни ресурси или данни, които може да не са налични при създаването на обекта.
lazy свойствата трябва да бъдат:
- Променливи (
var), тъй като стойността им може да се промени при първия достъп. - Без наблюдатели (
willSet,didSet) до първия достъп.
class HeavyResource {
init() {
print("Тежкият ресурс е инициализиран")
// Симулация на скъпа инициализация
Thread.sleep(forTimeInterval: 1)
}
}
class MyPresenter {
let name = "Presenter"
// lazy свойство, инициализира се при първо използване
lazy var heavyResource: HeavyResource = {
print("Създаване на тежкия ресурс")
return HeavyResource()
}()
init() {
print("\(name) е инициализиран")
}
func accessResource() {
print("Достъп до тежкия ресурс...")
_ = heavyResource // Тук се случва инициализацията на lazy свойството
print("Ресурсът е достъпен")
}
}
// Инициализираме презентъра
let presenter = MyPresenter() // Изход: Presenter е инициализиран
// Достъпът до ресурса става по-късно, когато наистина е необходим
presenter.accessResource()
/*
Изход:
Достъп до тежкия ресурс...
Създаване на тежкия ресурс
Тежкият ресурс е инициализиран
Ресурсът е достъпен
*/
// Повторният достъп не причинява повторна инициализация
presenter.accessResource()
/*
Изход:
Достъп до тежкия ресурс...
Ресурсът е достъпен
*/