Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 210новых вакансий за сутки·93 612вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 266
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 126
  • Облачные технологии14 083
  • QA вакансии3 456
  • Backend вакансии2 116
  • Инженер данных1 809
  • Продакт-менеджер1 261

Разработка

  • Android1 862
  • iOS1 700
  • Fullstack вакансии990
  • AI вакансии951
  • Frontend вакансии749
  • Mobile вакансии44

По стеку

  • Go8 688
  • Java6 537
  • Node.js2 026
  • .NET1 722
  • Kotlin1 611
  • Rust1 458
  • C#710
  • PHP682
  • C++571

DevOps и инфраструктура

  • Kubernetes7 772
  • DevOps вакансии6 054
  • Linux-инфраструктура5 493
  • Terraform / IaC4 275
  • CI/CD3 239
  • Мониторинг и Observability1 790
  • SRE568
  • Кибербезопасность458

Аналитика и данные

  • Data Scientist1 143
  • Бизнес-аналитик923
  • Аналитик данных857
  • Системный аналитик152

Другие направления

  • Проджект-менеджер620
  • UI/UX дизайн147
  • Ручное тестирование14

По регионам

  • Вакансии в США44 437
  • Вакансии в Европе23 855
  • Вакансии в Канаде4 483
  • Работа в России3 904

По формату

  • Удалённые вакансии75 212
  • Релокация в США44 436
  • Гибридная работа12 388
  • Офисная работа7 083

По уровню

  • Senior вакансии42 625
  • Middle вакансии20 854
  • Junior вакансии6 721

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме SwiftВсе вопросы
SwiftMiddleТеория

Как Swift взаимодействует с Objective-C?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Swift и Objective-C взаимодействуют через bridging header (ObjC → Swift) и автогенерируемый ModuleName-Swift.h (Swift → ObjC). Swift-классы должны наследоваться от NSObject и быть помечены @objc, чтобы стать видимыми из ObjC.

Использование Objective-C из Swift

В app target создаётся bridging header: ModuleName-Bridging-Header.h. Любой #import в нём делает соответствующие ObjC-классы и функции видимыми в Swift.

// MyApp-Bridging-Header.h
#import "LegacyParser.h"
#import <SomeObjCLibrary/SomeObjCLibrary.h>
// Swift-файл
let parser = LegacyParser()
parser.parse("input")  // вызов ObjC-метода из Swift

Для фреймворков и SPM-пакетов bridging header недоступен — там используют module map: файл module.modulemap, определяющий ObjC-модуль, который Swift может импортировать напрямую через import ModuleName.

Swift и Objective-C: взаимодействие

Swift и Objective-C могут сосуществовать в одном проекте благодаря специальному bridging-слою, который Xcode и компилятор генерируют автоматически. Это позволяет постепенно мигрировать ObjC-кодовые базы на Swift без переписывания с нуля.

Использование Swift из Objective-C

Компилятор автоматически генерирует заголовок ModuleName-Swift.h. Чтобы класс или метод попал в этот заголовок, необходимо:

  • Класс должен наследоваться от NSObject (или быть @objc с ограничениями).
  • Метод/свойство должны быть помечены @objc явно или неявно (через @objcMembers).
  • Должны использоваться только типы, совместимые с ObjC (нет generics, нет enums с associated values).
// Swift
@objc class UserManager: NSObject {
    @objc var currentUser: String = ""

    @objc func login(username: String, completion: @escaping (Bool) -> Void) {
        // ...
        completion(true)
    }
}
// Objective-C
#import "MyApp-Swift.h"

UserManager *manager = [[UserManager alloc] init];
[manager loginWithUsername:@"alice" completion:^(BOOL success) {
    NSLog(@"Login: %d", success);
}];

Маппинг типов

  • String ↔ NSString — автоматический bridge, без копирования.
  • Array<T> ↔ NSArray, Dictionary ↔ NSDictionary, Set ↔ NSSet.
  • Int, Double, Bool ↔ NSNumber через as cast.
  • Swift Optional → ObjC nullable pointer; String? → NSString * _Nullable.
  • Swift enums без associated values и с @objc → ObjC enum (Int raw value).

Nullability аннотации в ObjC для Swift

Чтобы Swift не импортировал все ObjC-указатели как ImplicitlyUnwrappedOptional, добавляйте аннотации в ObjC-заголовках:

// ObjC (LegacyParser.h)
NS_ASSUME_NONNULL_BEGIN
@interface LegacyParser : NSObject
- (nullable NSString *)parse:(NSString *)input error:(NSError **)error;
@end
NS_ASSUME_NONNULL_END

@objc(name) для переименования

@objc(RWUserSession)
class UserSession: NSObject {
    @objc(startWithToken:)
    func start(token: String) { }
}

Подводные камни

  • Generics не экспортируются в ObjC — Swift generic classes и methods невидимы в Objective-C; нужно создавать non-generic обёртки.
  • Swift-only типы ломают interop — struct, enum с associated values, protocol with associated types, actor — всё это не может быть представлено в ObjC.
  • Циклические импорты — ObjC-файл импортирует Swift-заголовок, а Swift-файл через bridging header импортирует тот же ObjC-файл → ошибка компиляции. Решение: forward declaration в ObjC.
  • Производительность bridging коллекций — конвертация Array<String> в NSArray при каждом вызове — O(n) копирование; критично в tight loops.
  • @objcMembers захватывает всё — аннотация делает публичным весь класс, включая методы, которые вы не планировали expose-ить в ObjC; предпочитайте явные @objc на конкретных членах.
  • Исключения ObjC не ловятся в Swift — ObjC @throw минует Swift try/catch; нужен ObjC-враппер с NS_ERROR_ENUM или tryBlock.
  • Изменение сигнатуры ломает ObjC-вызывающих — переименование Swift-параметра меняет ObjC selector; используйте @objc(newName:) для обратной совместимости.

Частые вопросы на собеседовании

  • Что такое optionals в Swift и как безопасно их разворачивать?
  • В чём разница между strong, weak и unowned ссылками?
  • Для каких задач Swift является сильным выбором, а где лучше честно выбрать другой язык?
  • В чём разница между class и struct в Swift?

Типичные ошибки

  • Сводить «Swift взаимодействует с Objective-C» к синтаксису и не объяснять модель памяти.
  • Игнорировать жизненный цикл, основной поток или момент освобождения ресурсов в сценарии swift-29.
  • Выбирать API по привычке, не проверяя состояние, ошибки, доступность и платформенные ограничения.

Что проверяет интервьюер

  • Формулирует точную модель для «Swift взаимодействует с Objective-C» и подтверждает ее корректным примером.
  • Умеет связать ответ с система типов, тестированием и отладкой на устройстве.
  • Называет ограничения подхода swift-29, включая производительность, память и сопровождение.

Как вы знаете этот вопрос?

Проверить себя по теме Swift →

Источники

  • https://developer.apple.com/documentation/swift/importing-objective-c-into-swift

Связанные темы

Swiftlanguage-runtimeMobile-Engineering

Вакансии с этим навыком

Swift вакансии
  • Senior Software Engineer II, Mobile - On App Ads (AI Native)
  • Senior Engineering Manager, Co-Intelligent Coaching
  • Senior Software Engineer (iOS) – Digital Products
  • Senior Software Engineer, Bio - iOS
  • Middle iOS Engineer (Lviv only) (#6003)