Sobes.tech
Junior

Šta je lazy?

sobes.tech АИ

Одговор од АИ

Ključna riječ lazy koristi se za odloženu inicijalizaciju svojstva.

Svojstvo s lazy inicijalizira se samo pri prvom pristupu. Ovo je korisno za:

  • Performanse: ako kreiranje objekta zahtijeva mnogo resursa, ali nije uvijek potrebno.
  • Izbjegavanje cikličkih ovisnosti tijekom inicijalizacije.
  • Rad s vanjskim resursima ili podacima koji možda nisu dostupni pri stvaranju objekta.

Svojstva lazy trebaju biti:

  • Varijable (var), jer se njihova vrijednost može promijeniti pri prvom pristupu.
  • Bez promatrača svojstava (willSet, didSet) do prvog pristupa.
class HeavyResource {
    init() {
        print("Teški resurs inicijaliziran")
        // Simulacija skupog inicijaliziranja
        Thread.sleep(forTimeInterval: 1)
    }
}

class MyPresenter {
    let name = "Prezentator"

    // svojstvo lazy, inicijalizira se pri prvom korištenju
    lazy var heavyResource: HeavyResource = {
        print("Kreiranje teškog resursa")
        return HeavyResource()
    }()

    init() {
        print("\(name) inicijaliziran")
    }

    func accessResource() {
        print("Pristup teškom resursu...")
        _ = heavyResource // Ovdje dolazi do inicijalizacije lazy svojstva
        print("Resurs pristupljen")
    }
}

// Inicijaliziramo prezentatora
let presenter = MyPresenter() // Izlaz: Prezentator inicijaliziran

// Pristup resursu kasnije, kada je zaista potreban
presenter.accessResource()
/*
Izlaz:
Pristup teškom resursu...
Kreiranje teškog resursa
Teški resurs inicijaliziran
Resurs pristupljen
*/

// Ponavljajući pristup ne izaziva ponovno inicijaliziranje
presenter.accessResource()
/*
Izlaz:
Pristup teškom resursu...
Resurs pristupljen
*/