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