Junior
Co je lazy?
sobes.tech AI
Odpověď od AI
Klíčové slovo lazy se používá pro odloženou inicializaci vlastnosti.
Vlastnost s lazy je inicializována pouze při prvním přístupu k ní. To je užitečné pro:
- Výkon: pokud tvorba objektu vyžaduje hodně zdrojů, ale není vždy nutná.
- Vyvarování se cyklických závislostí při inicializaci.
- Práci s externími zdroji nebo daty, která nemusí být při vytváření objektu dostupná.
Vlastnosti lazy by měly být:
- Proměnné (
var), protože jejich hodnota se může při prvním přístupu změnit. - Bez pozorovatelů vlastností (
willSet,didSet) do prvního přístupu.
class HeavyResource {
init() {
print("Těžký zdroj inicializován")
// Simulace náročné inicializace
Thread.sleep(forTimeInterval: 1)
}
}
class MyPresenter {
let jméno = "Prezentér"
// vlastnost lazy, inicializuje se při prvním použití
lazy var heavyResource: HeavyResource = {
print("Vytváření těžkého zdroje")
return HeavyResource()
}()
init() {
print("\(jméno) inicializován")
}
func accessResource() {
print("Přístup ke těžkému zdroji...")
_ = heavyResource // Zde dochází k inicializaci lazy vlastnosti
print("Zdroj přístupný")
}
}
// Inicializujeme prezentéra
let presenter = MyPresenter() // Výstup: Prezentér inicializován
// Přístup ke zdroji později, když je skutečně potřeba
presenter.accessResource()
/*
Výstup:
Přístup ke těžkému zdroji...
Vytváření těžkého zdroje
Těžký zdroj inicializován
Zdroj přístupný
*/
// Opakovaný přístup nezpůsobí opětovnou inicializaci
presenter.accessResource()
/*
Výstup:
Přístup ke těžkému zdroji...
Zdroj přístupný
*/