Знаете ли основные принципы объектно-ориентированного программирования
Что проверяют
Не определения из учебника, а умение показать четыре принципа на Swift и понимание, чем Swift отличается от классического ООП. Интервьюер ждёт, что вы заговорите о структурах и протоколах. Следом обычно спрашивают про композицию против наследования или про протокольно-ориентированное программирование.
Как отвечать
Назовите принципы и сразу привяжите их к языку:
- инкапсуляция: состояние скрыто за интерфейсом типа через уровни доступа
private,fileprivate,internal(по умолчанию),package,public,open. Частый приём:private(set) var, когда свойство читается снаружи, а меняется только внутри типа; - наследование: есть только у классов. Структуры и перечисления не наследуются, класс можно закрыть через
final, аopenразрешает наследование за пределами модуля. В UIKit наследование встречается постоянно: свойUIViewController, свойUITableViewCell; - полиморфизм: переопределение через
overrideв подклассах, соответствие протоколам, дженерики. Код, работающий сany Shapeилиsome Shape, не знает конкретного типа; - абстракция: абстрактных классов в Swift нет, их роль играют протоколы. Протокол с расширением даёт реализацию по умолчанию, и принять его может и класс, и структура.
Отдельно скажите, что Swift смещает акцент с наследования на протоколы и значимые типы. SwiftUI построен на структурах, соответствующих протоколу View, наследования там нет вовсе. Структуры копируются при присваивании, поэтому не делят изменяемое состояние незаметно для вас.
Где спотыкаются
Дают определения без единой строчки Swift, словно отвечают на собеседовании по Java. Для iOS это минус: от вас ждут struct, protocol и уровни доступа.
Не знают про статическую диспетчеризацию в расширениях протоколов. Если метод реализован в extension, но не объявлен в самом протоколе, через переменную типа протокола вызовется версия из расширения, а не из конкретного типа.
Строят BaseViewController с логикой на все случаи. Иерархия быстро становится хрупкой, а та же задача решается композицией: дочерними контроллерами, протоколами с расширениями, отдельными сервисами.