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()
/*
Чыгуу:
Кыйын ресурска кирүү...
Ресурс жеткиликтүү
*/