Sobes.tech
Junior

Was ist lazy?

sobes.tech KI

Antwort von AI

Das Schlüsselwort lazy wird für die verzögerte Initialisierung einer Eigenschaft verwendet.

Eine Eigenschaft mit lazy wird nur beim ersten Zugriff darauf initialisiert. Das ist nützlich für:

  • Leistung: Wenn die Erstellung des Objekts viele Ressourcen erfordert, aber nicht immer notwendig ist.
  • Vermeidung zyklischer Abhängigkeiten während der Initialisierung.
  • Arbeiten mit externen Ressourcen oder Daten, die bei der Objekterstellung möglicherweise nicht verfügbar sind.

Lazy-Eigenschaften sollten:

  • Variablen (var) sein, da ihr Wert sich beim ersten Zugriff ändern kann.
  • Keine Beobachter (willSet, didSet) haben bis zum ersten Zugriff.
class HeavyResource {
    init() {
        print("Schwere Ressource initialisiert")
        // Simulation einer ressourcenintensiven Initialisierung
        Thread.sleep(forTimeInterval: 1)
    }
}

class MyPresenter {
    let name = "Presenter"

    // Lazy-Eigenschaft, wird beim ersten Gebrauch initialisiert
    lazy var heavyResource: HeavyResource = {
        print("Schwere Ressource wird erstellt")
        return HeavyResource()
    }()

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

    func accessResource() {
        print("Zugriff auf schwere Ressource...")
        _ = heavyResource // Hier erfolgt die Initialisierung der Lazy-Eigenschaft
        print("Ressource zugegriffen.")
    }
}

// Presenter initialisieren
let presenter = MyPresenter() // Ausgabe: Presenter initialized

// Der Zugriff auf die Ressource erfolgt später, wenn sie wirklich benötigt wird
presenter.accessResource()
/*
Ausgabe:
Zugriff auf schwere Ressource...
Schwere Ressource wird erstellt
Schwere Ressource initialisiert
Ressource zugegriffen.
*/

// Wiederholter Zugriff löst keine erneute Initialisierung aus
presenter.accessResource()
/*
Ausgabe:
Zugriff auf schwere Ressource...
Ressource zugegriffen.
*/