Junior
Cos'è lazy?
sobes.tech AI
Risposta dell'AI
La parola chiave lazy viene utilizzata per l'inizializzazione differita di una proprietà.
Una proprietà con lazy viene inizializzata solo al primo accesso. Questo è utile per:
- Prestazioni: se la creazione dell'oggetto richiede molte risorse, ma non sempre è necessaria.
- Evitare dipendenze cicliche durante l'inizializzazione.
- Lavorare con risorse esterne o dati che potrebbero non essere disponibili al momento della creazione dell'oggetto.
Le proprietà lazy devono essere:
- Variabili (
var), poiché il loro valore può cambiare al primo accesso. - Senza osservatori di proprietà (
willSet,didSet) fino al primo accesso.
class HeavyResource {
init() {
print("Risorsa pesante inizializzata")
// Simulazione di inizializzazione costosa
Thread.sleep(forTimeInterval: 1)
}
}
class MyPresenter {
let name = "Presenter"
// proprietà lazy, inizializzata al primo utilizzo
lazy var heavyResource: HeavyResource = {
print("Creazione risorsa pesante")
return HeavyResource()
}()
init() {
print("\(name) inizializzato")
}
func accessResource() {
print("Accesso alla risorsa pesante...")
_ = heavyResource // Qui avviene l'inizializzazione della proprietà lazy
print("Risorsa accessibile.")
}
}
// Inizializziamo il presenter
let presenter = MyPresenter() // Output: Presenter initialized
// L'accesso alla risorsa avviene più tardi, quando realmente necessario
presenter.accessResource()
/*
Output:
Accesso alla risorsa pesante...
Creazione risorsa pesante
Risorsa pesante inizializzata
Risorsa accessibile.
*/
// L'accesso ripetuto non provoca una ri-inizializzazione
presenter.accessResource()
/*
Output:
Accesso alla risorsa pesante...
Risorsa accessibile.
*/