lazy var
— это ключевое слово в Swift, обозначающее отложенную (ленивую) инициализацию свойства. Это значит, что значение такого свойства вычисляется только при первом обращении к нему, а не во время создания экземпляра объекта.
Инициализация при первом доступе
var
инициализируются сразу при создании объекта.lazy var
откладывает вычисление значения до момента, когда оно действительно понадобится.Используется только с var
lazy
нельзя применять к let
, потому что значение должно быть изменяемым на этапе инициализации.Не потокобезопасна по умолчанию
lazy var
одновременно до инициализации, это может привести к race condition.Если свойство требует сложных вычислений или загрузки данных, его можно сделать lazy
, чтобы не замедлять создание объекта.
class ImageLoader {
lazy var processedImage: UIImage = {
print("Вычисляем изображение...")
return self.applyFilters(to: UIImage(named: "photo")!)
}()
private func applyFilters(to image: UIImage) -> UIImage {
// Дорогие операции с изображением
return image
}
}
Если свойство зависит от других полей класса, которые могут быть не готовы при инициализации.
class Person {
var name: String
lazy var greeting: String = {
return "Привет, \(self.name)!"
}()
init(name: String) {
self.name = name
}
}
Полезно, если свойство используется редко — зачем выделять память заранее?
struct
) в immutable
контексте.Если попытаться использовать lazy
с let
:
lazy let constant: Int = 42 // Ошибка: 'lazy' cannot be used on a let
lazy var
— мощный инструмент для оптимизации производительности и управления памятью, но требует аккуратного использования, особенно в многопоточной среде.