Есть ли опыт с C++
Что проверяют
Сможете ли вы работать с частью проекта на C++: общим ядром для iOS и Android, аудио и видео, криптографией, ML-движком. Главное для интервьюера: знаете ли вы, как C++ стыкуется со Swift и где на этой границе проблемы. Следом обычно просят рассказать, как вы пробрасывали C++-код в Swift.
Как отвечать
Начните с честной оценки уровня: писали модули сами, правили чужой код или только читали. Это важнее громкого «да».
Затем покажите, что знаете механику интеграции:
- Objective-C++: классический путь. Файл
.mmоборачивает C++-класс, а наружу смотрит чистый Objective-C заголовок без C++ типов, который Swift видит через bridging header или модуль; - прямой interop: начиная со Swift 5.9 Swift умеет вызывать C++ напрямую, режим включается настройкой C++ and Objective-C Interoperability в Xcode или флагом
-cxx-interoperability-mode=default. Поддержка неполная, поэтому многие проекты остаются на обёртках; - память: ARC не управляет C++-объектами. Внутри C++ работает RAII и
std::unique_ptr, а обёртка владеет объектом и освобождает его вdeallocилиdeinit; - исключения и потоки: C++-исключение не должно пересекать границу, Swift его не поймает. Колбэки из C++ приходят на чужих потоках, и к UIKit из них идут только через главный поток;
- сборка: исходники в таргете Xcode или отдельная библиотека через CMake, упакованная в XCFramework.
Дальше конкретный пример из вашей практики: какая задача, что было на C++, как выглядела граница, какую проблему решили. Если опыта нет, так и скажите: знаю синтаксис на таком-то уровне, писал учебные проекты, понимаю, как устроена обёртка через Objective-C++, готов разбираться. Это звучит лучше выдуманного проекта.
Где спотыкаются
Завышают уровень. После «да, есть опыт» идут вопросы про семантику перемещения, правило пяти и shared_ptr против unique_ptr, и ответ разваливается.
Протаскивают C++ типы в заголовок, который импортирует Swift. #include <vector> в bridging header без включённого interop ломает сборку всего Swift-таргета.
Держат сырой указатель на C++-объект в обёртке и не освобождают его, или захватывают self в колбэке без weak и получают утечку.