Заметки
• Расширение и/или изменение функционала
• Понятия:
• Subсlass
• Superсlass
• В Java также по цепочке вызываются все конструкторы, но такое строгой проверки нет, многие свойства могли
оставаться null
Применение override
• Stored property • get/set
• Просто объявить такую же переменную в дочернем • Заменить поведение блоков get/set
классе нельзя (в Java – можно, будет скрытие • Если у родителя есть set - в дочернем классе его
переменной) также обязательно нужно переопределить
• Обязательно переопределять get и set
• Subscript
• Computed property • Заменить функционал
• Можно переопределять только get или get-set
• Если у родителя есть set - в дочернем классе его
• Init
также обязательно нужно переопределить
• Только для designated initializer
• Observers
• Будут вызываться все наблюдатели от родителей до
дочернего
• По сути – не переопределяет, а дополняет
• Методы
• Заменять или добавлять функционал
required init
• required init
• все дочерние классы обязаны переопределить этот init
• У дочернего init необязательно указывать override, т.к. у него будет указан required
init
• Designated initializer должен вызывать родительский designated initializer (как в Java – должна быть
хотя бы одна связь через конструкторы)
2. Только после этого можно изменять свойства, вызывать методы (если необходимо) и пр.
• Если коротко описать 2 фазы: сначала происходит инициализация свойств у цепочки классов, затем их использование
(изменение) и весь остальной код
init
Фаза 1 Фаза 2
• Цель – заполнить свойства классов всех • Цель – выполнить кастомный код (если он есть)
классов из цепочки наследования : изменение свойств, вызов методов и пр.
• 2) если дочерний класс переопределяет все родительские designated initializer – дочерний класс автоматически
наследует все convenience initializers из родительского класса
* Компилятор будет вам подсказывать, если не заполните какие-либо свойства или перепутаете порядок инициализации
init
• Не путайте порядок действий:
• designated initializer
• Сначала нужно заполнить свои свойства класса
• Потом вызывать super.init для заполнения свойств родителя
• Прочитать:
• https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Inheritance.ht
ml