Swift: Properties — свойства

Свойства — переменные ассоциированные с классом, структурой или перечислением. Они бывают нескольких видов:

Stored Propertiesхранимые свойства:

Обычные свойства, могут быть как изменяемыми var, так и константами let

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

let constantStruct = Variables(sampleConstant: 10, sampleVariable: «test»)
constantStruct.sampleVariable = «newstring» // ошибка

Для классов это неверно, у экземпляра класса объявленного как константа можно менять значение переменных свойств.

Lazy Stored Properties — ленивые свойства:

Вычисляются в момент первого обращения, помечаются как lazy, не могут быть константой. Применяются когда создание класса требует больших затрат и это используется редко

Computed Properties — вычисляемые свойства:

Свойства, значения которых вычисляется заново при каждом обращении

path — вычисляемое свойство, оно имееет get — позволяющее получить его значение, и set — выставить

Если не указывать явно имя (newPath), то по умолчанию будет использовано newValue

set тут конечно явно притянутый за уши, но ради демонстрации синтаксиса — пусть будет. Но в данном примере явно будет лучше без него, таким образом свойство станет только для чтения (обозначить как let все равно нельзя, т.к. оно каждый раз вычисляется и по сути является переменной)

Property Observers — наблюдатели за свойством:

Позволяет прикреплять наблюдателя к хранимым свойствам, включая наследуемые, кроме ленивых (lazy)
Если свойства не наследуемое — смысла прикреплять наблюдателя нет, проще вставить необходимый код в set

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

Глобальные переменные и константы всегда вычисляются лениво, при этом помечать как lazy их не нужно
Локальные — никогда

Type Properties (Свойства типа известные в C как статические):

Свойства относящиеся к типу, а не конкретному экземпляру
У значимых типов бывают — хранимыми и вычисляемыми, для ссылочных типов — только вычисляемыми.

Ключевое слово class означает что данное свойство можно переопределить у потомков (только для ссылочных типов)
Доступ — стандартен, по точке но от Типа, а не экземпляра

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *