Back to questions
Junior
103
questionbank
Для чего используется ключевое слово lazy в Swift?
Sobes Copilot
Get answers in real time
Answer from AI
sobes.tech AI
Ключевое слово lazy используется для отложенной инициализации свойства. Это означает, что значение свойства не вычисляется при создании экземпляра структуры или класса, а только при первом обращении к этому свойству.
Преимущества использования lazy:
- Экономия ресурсов: Инициализация может быть дорогостоящей операцией (например, чтение файла, сетевой запрос), и если свойство не всегда используется, отложенная инициализация позволяет избежать ненужных вычислений и затрат памяти.
- Разрешение циклических зависимостей: В некоторых случаях, свойство
Аможет зависеть от свойстваБ, а свойствоБ— от свойстваА.lazyможет помочь разорвать такую зависимость.
Ограничения:
lazyсвойства должны быть изменяемыми (var), так как их значение устанавливается после создания экземпляра.lazyсвойства не могут быть константами (let).- Наблюдатели свойств (
didSet,willSet) не могут быть назначеныlazyсвойству.
Пример использования:
class DataFetcher {
// Имитация дорогостоящей операции
func fetchData() -> [String] {
print("Fetching data...")
return ["Item 1", "Item 2", "Item 3"]
}
}
class ViewController {
let dataFetcher = DataFetcher()
// Данные будут загружены только при первом обращении к 'data'
lazy var data: [String] = {
self.dataFetcher.fetchData()
}()
func displayData() {
print("Displaying data: \(data)")
}
func updateUI() {
// Тут data не используется, fetchData() не вызывается
print("Updating UI...")
}
}
let vc = ViewController()
// На этом этапе fetchData() еще не вызвана
vc.updateUI() // fetchData() все еще не вызвана
vc.displayData() // fetchData() будет вызвана здесь, при первом доступе к data
vc.displayData() // fetchData() больше не будет вызвана, используется кэшированное значение