Junior
Co to jest lazy?
sobes.tech AI
Odpowiedź od AI
Słowo kluczowe lazy jest używane do opóźnionej inicjalizacji właściwości.
Właściwość z lazy jest inicjalizowana tylko przy pierwszym dostępie do niej. Jest to przydatne do:
- Wydajności: jeśli tworzenie obiektu wymaga dużo zasobów, ale nie zawsze jest konieczne.
- Unikania cyklicznych zależności podczas inicjalizacji.
- Pracy z zasobami zewnętrznymi lub danymi, które mogą nie być dostępne podczas tworzenia obiektu.
Właściwości lazy powinny być:
- Zmiennymi (
var), ponieważ ich wartość może się zmienić przy pierwszym dostępie. - Bez obserwatorów właściwości (
willSet,didSet) do pierwszego dostępu.
class HeavyResource {
init() {
print("Inicjalizacja ciężkiego zasobu")
// Symulacja kosztownej inicjalizacji
Thread.sleep(forTimeInterval: 1)
}
}
class MyPresenter {
let name = "Presenter"
// właściwość lazy, inicjalizuje się przy pierwszym użyciu
lazy var heavyResource: HeavyResource = {
print("Tworzenie ciężkiego zasobu")
return HeavyResource()
}()
init() {
print("\(name) zainicjalizowany")
}
func accessResource() {
print("Dostęp do ciężkiego zasobu...")
_ = heavyResource // Tu następuje inicjalizacja właściwości lazy
print("Zasób dostępny")
}
}
// Inicjalizacja prezentera
let presenter = MyPresenter() // Wyjście: Presenter zainicjalizowany
// Dostęp do zasobu następuje później, gdy jest naprawdę potrzebny
presenter.accessResource()
/*
Wyjście:
Dostęp do ciężkiego zasobu...
Tworzenie ciężkiego zasobu
Inicjalizacja ciężkiego zasobu
Zasób dostępny
*/
// Powtórny dostęp nie wywołuje ponownej inicjalizacji
presenter.accessResource()
/*
Wyjście:
Dostęp do ciężkiego zasobu...
Zasób dostępny
*/