Академический Документы
Профессиональный Документы
Культура Документы
Структура
• struct
• Value type – при присвоении значения копируется, а не передается ссылка на объект
• Многие встроенные типы являются структурой (String, Int, Dictionary, Array и пр.) – можно посмотреть в XCode
• Проще и быстрее, чем обычные классы
• Properties:
• Stored properties
• Хранят конкретное значение
• var или let
• необязательные свойства можно указать как Optional (могут принимать nil)
• Computed properties
• Не хранят конкретное значение, а вычисляют его
• Могут использовать другие свойства для вычисления
• Небольшие вычисления (иначе лучше использовать метод)
• Реализуется с помощью конструкций get-set
• только var
static
• В Swift называют «type property» – статичный элемент
• self – аналог this, ссылка на текущий экземпляр (рекомендуется всегда использовать self, связано с поведением
замыканий внутри класса, когда замыкание захватывает переменную)
get-set
• Геттеры – сеттеры – это computed property, поэтому только вычисляют значения на основе других переменных, а не хранят как
stored property (в отличие от Java, где get-set это просто доступ к переменным объекта)
• set отличается от Java – больше используется, чтобы вычислить значение из других переменных
• Если get и set не выполняют вычислений – лучше их не создавать (использовать просто stored property)
• Не вызывайте self присвоение для той же переменной внутри set (будет зацикливание):
• self.budget = newValue для сеттера budget
Property observers
• Observers (наблюдатели)
• «Слушают» изменение значений для stored property (для computed property есть get-set)
• Может «отловить» момент до или после изменения значения
• Переменная с наблюдателями может присваивать значение по-умолчанию при объявлении (computed property не может)
• Нельзя использовать одновременно с computed property (get/set)
• Можно использовать константы oldValue и newValue (либо задавать свои имена этих констант, если не хотите использовать имена
по-умолчанию)
• Отрабатывают:
• Когда меняем значение уже после создания объекта (не во время инициализации)
• Если передали свойство в метод в качестве параметра inout
lazy
• Инициализация свойства по требованию (при первом обращении)
• Stored property
• Computed properties
Когда и что использовать
• Если переменная read-write – используйте просто • Если переменная вычисляет свое значение на основе
объявление переменной других переменных – используйте get/set
var name: String var name: String{
get{
return ““
• Если переменная read-only – реализуйте только get }
var name: String{ set{
return ““ // здесь нельзя присваивать значение в эту же
} // переменную self.name – зациклится, но можно
// использовать super.name (если name есть у родит.
// класса)
}
}
Домашнее задание
• Реализовать Hometask
• Прочитать:
• https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html
• https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStruc
tures.html