Sobes.tech
Назад к вопросам
Junior
104
questionbank

Для чего используется ключевое слово lazy в Swift?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

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() больше не будет вызвана, используется кэшированное значение