Junior
Kas yra lazy?
sobes.tech AI
Atsakymas iš AI
Raktinis žodis lazy naudojamas vėluotai inicializacijai savybėje.
Savybė su lazy inicializuojama tik pirmojo prieigos metu. Tai naudinga:
- našumui: jei objekto kūrimas reikalauja daug išteklių, bet ne visada būtina.
- ciklinių priklausomybių išvengimui inicializacijos metu.
- darbui su išoriniais ištekliais ar duomenimis, kurie gali būti neprieinami kuriant objektą.
Lazy savybės turi būti arba:
- kintamos (
var), nes jų reikšmė gali pasikeisti pirmojo prieigos metu. - neturi turėti stebėtojų (
willSet,didSet) iki pirmojo prieigos.
class HeavyResource {
init() {
print("Sunkusis išteklius inicializuotas")
// Imituojama išteklių imli inicializacija
Thread.sleep(forTimeInterval: 1)
}
}
class MyPresenter {
let name = "Presenter"
// lazy savybė, inicializuojama pirmojo naudojimo metu
lazy var heavyResource: HeavyResource = {
print("Kuriamas sunkusis išteklius")
return HeavyResource()
}()
init() {
print("\(name) inicializuotas")
}
func accessResource() {
print("Prieiga prie sunkio ištekliaus...")
_ = heavyResource // Čia įvyksta lazy savybės inicializacija
print("Išteklius pasiektas.")
}
}
// Inicializuojame presenterį
let presenter = MyPresenter() // Išves: Presenter inicializuotas
// Prieiga prie ištekliaus vėliau, kai ji tikrai reikalinga
presenter.accessResource()
/*
Išves:
Prieiga prie sunkio ištekliaus...
Kuriamas sunkusis išteklius
Sunkusis išteklius inicializuotas
Išteklius pasiektas.
*/
// Pakartotinė prieiga ne sukelia pakartotinės inicializacijos
presenter.accessResource()
/*
Išves:
Prieiga prie sunkio ištekliaus...
Išteklius pasiektas.
*/