Свифт: почему ленивое, вычисленное свойство и свойство обозревателя нельзя пускать - PullRequest
1 голос
/ 07 ноября 2019

Я искал, почему ленивое, вычисляемое свойство и наблюдатель свойства не могут быть (пусть) постоянными, я знаю, например, ленивые не назначаются до тех пор, пока к ним нет доступа, но почему это не может быть (пусть), делает этозначит, ленивый будет иметь нулевое значение или любое другое значение до того, как к нему будут обращаться и присвоить значение, которое мы присвоили? объясните, пожалуйста, то же самое для вычисляемого свойства и свойства обозревателя.

Ответы [ 2 ]

1 голос
/ 07 ноября 2019

Правила: -

  1. Вы можете объявить свойство с ключевым словом let или var.
  2. В быстром, переменная letдолжен быть инициализирован до инициализации владельца переменной let.
  3. После присвоения значения переменной let вы не сможете снова изменить его значение.

Теперь давайте посмотрим все три типа свойств одно за другим: -

  1. Ленивая переменная - Инициализируется после инициализации владельца. Таким образом, здесь нарушается правило 2.
  2. вычисляемая переменная - всякий раз, когда вы обращаетесь к вычисляемой переменной, она возвращает значение после некоторого вычисления / операции. Таким образом, здесь нарушается правило 3.
  3. наблюдатель свойства - didSet или willSet наблюдателя свойства вызывается при изменении его значения. Таким образом, здесь нарушается правило 3.
0 голосов
/ 07 ноября 2019

Ленивые свойства : Вы всегда должны объявлять ленивое свойство как переменную (с ключевым словом var), потому что его начальное значение не может быть получено, пока не завершится инициализация экземпляра. Постоянные свойства всегда должны иметь значение до завершения инициализации и поэтому не могут быть объявлены как ленивые.

вычисляемое свойство : тогда как вычисляемые свойства вычисляют (а не сохраняют) значение. Вместо этого они предоставляют геттер и необязательный сеттер для косвенного извлечения и установки других свойств и значений.

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

...