Sobes.tech
Junior

Čo je lazy?

sobes.tech AI

Odpoveď od AI

Kľúčové slovo lazy sa používa na oneskorenú inicializáciu vlastnosti.

Vlastnosť s lazy sa inicializuje iba pri prvom prístupe. Toto je užitočné pre:

  • Výkon: ak tvorba objektu vyžaduje veľa zdrojov, ale nie je vždy potrebná.
  • Vyhýbanie sa cyklickým závislostiam počas inicializácie.
  • Prácu s externými zdrojmi alebo dátami, ktoré nemusia byť dostupné pri vytváraní objektu.

Vlastnosti lazy by mali byť:

  • Premenné (var), pretože ich hodnota sa môže pri prvom prístupe zmeniť.
  • Bez pozorovateľov (willSet, didSet) do prvého prístupu.
class HeavyResource {
    init() {
        print("Ťažký zdroj inicializovaný")
        // Simulácia náročnej inicializácie
        Thread.sleep(forTimeInterval: 1)
    }
}

class MyPresenter {
    let name = "Prezentér"

    // vlastnosť lazy, inicializuje sa pri prvom použití
    lazy var heavyResource: HeavyResource = {
        print("Vytváranie ťažkého zdroja")
        return HeavyResource()
    }()

    init() {
        print("\(name) inicializovaný")
    }

    func accessResource() {
        print("Prístup k ťažkému zdroju...")
        _ = heavyResource // Tu dochádza k inicializácii lazy vlastnosti
        print("Zdroj prístupný")
    }
}

// Inicializujeme prezentéra
let presenter = MyPresenter() // Výstup: Prezentér inicializovaný

// Prístup ku zdroju neskôr, keď je naozaj potrebný
presenter.accessResource()
/*
Výstup:
Prístup k ťažkému zdroju...
Vytváranie ťažkého zdroja
Ťažký zdroj inicializovaný
Zdroj prístupný
*/

// Opakovaný prístup nevyvoláva opätovnú inicializáciu
presenter.accessResource()
/*
Výstup:
Prístup k ťažkému zdroju...
Zdroj prístupný
*/