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