Создание объекта — тяжелый процесс. Когда мы создаем объект класса, все общедоступные и частные свойства этого класса инициализируются внутри конструктора. Каждая переменная внутри инициализации класса требует определенного количества времени для выделения памяти в куче и удержания ее ссылки в стеке. Чем больше переменных, тем больше времени это может занять, но, поскольку время измеряется микросекундами или даже меньше, его нельзя наблюдать.

This post was originally posted at https://agrawalsuneet.github.io/blogs/computed-property-in-swift/ and reposted on Medium on 03rd Dec 2021.

Иногда нам не нужно, чтобы все объекты были инициализированы во время самого создания объекта класса.
На это может быть две причины.

  1. Этот объект/свойство/переменная зависит от другого объекта, который сначала инициализируется и использует его ссылку.
  2. Поток таков, что нам нужен этот объект только в определенном состоянии.

В Swift у нас есть определенные функции, которые могут помочь нам отложить инициализацию этого объекта в соответствии с требованиями.

Один из способов сделать это — использовать вычисляемые свойства.
Вычисляемые свойства — это свойства, которые не инициализируются во время создания объекта или вызова конструктора. Они вычисляются каждый раз при доступе к свойству.
Мы можем использовать его для любых сложных вычислений, которые мы хотим выполнять на условной основе. В отличие от ленивых свойств, эти свойства вычисляются каждый раз при доступе к свойству.

Базовая инициализация вычисляемого свойства в объекте класса User будет выглядеть следующим образом:

struct User {
    let name : String
    let age : Int
}
struct Department {
    var users : [User]
    
    init(users : [User]) {
        print("Department constructor is called")
        self.users = users
    }
    
    var youngestUser : User? {
        print("Department youngestUser is computed")
        return self.users.min(by: {$0.age < $1.age})
    }
}

Пожалуйста, продолжайте читать на https://agrawalsuneet.github.io/blogs/computed-property-in-swift/

Это все на данный момент. Вы можете прочитать другие мои интересные блоги здесь или насладиться моими играми или приложениями, перечисленными здесь. Не стесняйтесь использовать мои компоненты Android с открытым исходным кодом в своем приложении, указанном здесь. Или напишите электронное письмо, если вы не нашли то, что ищете, и вам нужна помощь.