Junior
Kas ir lazy?
sobes.tech AI
Atbilde no AI
Atslēgas vārds lazy tiek izmantots novilcinātai īpašības inicializācijai.
Īpašība ar lazy tiek inicializēta tikai pirmās piekļuves brīdī. Tas ir noderīgi:
- veiktspējai: ja objekta izveide prasa daudz resursu, bet tas nav vienmēr nepieciešams.
- ciklisko atkarību novēršanai inicializācijas laikā.
- darbam ar ārējiem resursiem vai datiem, kas var būt nepieejami objekta izveides laikā.
Lazy īpašības ir jābūt vai nu:
- mainīgām (
var), jo to vērtība var mainīties pirmās piekļuves laikā. - tām nedrīkst būt īpašības novērotāji (
willSet,didSet) līdz pirmajai piekļuvei.
class HeavyResource {
init() {
print("Smaga resursa inicializācija")
// Imitē resursu prasīgu inicializāciju
Thread.sleep(forTimeInterval: 1)
}
}
class MyPresenter {
let name = "Presenter"
// lazy īpašība, inicializējas pirmās lietošanas laikā
lazy var heavyResource: HeavyResource = {
print("Veido smago resursu")
return HeavyResource()
}()
init() {
print("\(name) inicializēts")
}
func accessResource() {
print("Pieeja smagam resursam...")
_ = heavyResource // Šeit notiek lazy īpašības inicializācija
print("Resurss piekļūts.")
}
}
// Inicializē presenter
let presenter = MyPresenter() // Izvade: Presenter inicializēts
// Piekļuve resursam vēlāk, kad tas tiešām ir nepieciešams
presenter.accessResource()
/*
Izvade:
Pieeja smagam resursam...
Veido smago resursu
Smaga resursa inicializācija
Resurss piekļūts.
*/
// Atkārtota piekļuve neizraisa atkārtotu inicializāciju
presenter.accessResource()
/*
Izvade:
Pieeja smagam resursam...
Resurss piekļūts.
*/