Sobes.tech
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ý
*/