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.
*/