Junior
Wat is lazy?
sobes.tech AI
Antwoord van AI
Het sleutelwoord lazy wordt gebruikt voor uitgestelde initialisatie van een eigenschap.
Een eigenschap met lazy wordt alleen bij de eerste toegang tot die eigenschap geïnitialiseerd. Dit is handig voor:
- Prestaties: als het maken van het object veel bronnen vereist, maar niet altijd nodig is.
- Het voorkomen van cyclische afhankelijkheden tijdens initialisatie.
- Werken met externe bronnen of gegevens die mogelijk niet beschikbaar zijn bij het maken van het object.
Lazy-eigenschappen moeten:
- Variabelen (
var) zijn, omdat hun waarde kan veranderen bij de eerste toegang. - Geen observatoren (
willSet,didSet) hebben tot de eerste toegang.
class HeavyResource {
init() {
print("Zware bron geïnitialiseerd")
// Simulatie van kostbare initialisatie
Thread.sleep(forTimeInterval: 1)
}
}
class MyPresenter {
let name = "Presenter"
// lazy eigenschap, wordt geïnitialiseerd bij eerste gebruik
lazy var heavyResource: HeavyResource = {
print("Zware bron wordt gemaakt")
return HeavyResource()
}()
init() {
print("\(name) geïnitialiseerd")
}
func accessResource() {
print("Toegang tot zware bron...")
_ = heavyResource // Hier vindt de initialisatie van de lazy eigenschap plaats
print("Bron benaderd")
}
}
// Initialiseer de presenter
let presenter = MyPresenter() // Uitvoer: Presenter geïnitialiseerd
// Toegang tot de bron gebeurt later, wanneer het echt nodig is
presenter.accessResource()
/*
Uitvoer:
Toegang tot zware bron...
Zware bron wordt gemaakt
Zware bron geïnitialiseerd
Bron benaderd
*/
// Herhaalde toegang veroorzaakt geen herinitialisatie
presenter.accessResource()
/*
Uitvoer:
Toegang tot zware bron...
Bron benaderd
*/