Используете ли Objective-C или сразу Swift
Что проверяют
Насколько вы готовы к реальной кодовой базе: в iOS-проектах с долгой историей Objective-C встречается до сих пор. Интервьюер хочет понять, умеете ли вы хотя бы читать его и работать на стыке двух языков. Следом обычно спрашивают про bridging header и видимость Swift-кода из Objective-C.
Как отвечать
Начните с честного описания опыта: основной язык, сколько лет, был ли Objective-C в проектах и в каком объёме. Новые проекты сейчас пишут на Swift, это можно сказать прямо. Дальше покажите, что понимаете, как языки живут вместе:
- Objective-C из Swift: в таргете приложения через bridging header, во фреймворке через umbrella header и модули. Аннотации
nullable/nonnullиNS_ASSUME_NONNULL_BEGINпревращают указатели в нормальные опционалы вместо неявно развёрнутых, а лёгкие дженерики вродеNSArray<NSString *> *дают типизированные коллекции; - Swift из Objective-C: через сгенерированный заголовок
ModuleName-Swift.h. Попадает туда только совместимое с рантаймом Objective-C: классы-наследникиNSObjectи члены с@objc. Структуры, enum с ассоциированными значениями, дженерики и протоколы с associated types не видны; - динамика рантайма: KVO, селекторы и swizzling требуют
@objc dynamic; - миграция: переводят постепенно, модуль за модулем, начиная с нового кода и слоёв, покрытых тестами, а не всё приложение разом.
Если Objective-C у вас не было, скажите это и добавьте, что читаете синтаксис (сообщения в квадратных скобках, @property, блоки) и понимаете принципы совместимости. Это честнее, чем придумывать опыт, который развалится на первом вопросе про ARC и __weak в блоках.
Где спотыкаются
Говорят, что Objective-C мёртв и знать его не нужно. Для компании с приложением десятилетней истории это звучит как нежелание работать с их кодом.
Рассказывают, что переписали всё приложение на Swift и оно стало быстрее. Без замеров это неправдоподобно, а сама идея полного переписывания вызывает вопросы о рисках.
Не могут объяснить, почему Swift-класс не виден из Objective-C. Ответ короткий: нет @objc или наследования от NSObject, либо во фреймворке класс не объявлен public.