Ответ
Да, это распространено при миграции или использовании legacy-кода. Ключевой инструмент — Bridging Header.
Основные шаги:
- Создайте файл
YourProject-Bridging-Header.h. - Импортируйте в него необходимые Objective-C заголовки:
// YourProject-Bridging-Header.h #import "OldObjectiveCClass.h" #import "LegacyLibrary.h" - Укажите путь к этому файлу в настройках проекта (Build Settings -> Swift Compiler - General -> Objective-C Bridging Header).
Использование в Swift-коде:
// Objective-C класс становится доступен в Swift
let legacyObject = OldObjectiveCClass()
let result = legacyObject.performOperation()
Критические нюансы:
@objcатрибут: Для предоставления Swift-кода Objective-C пометьте класс или метод@objcили@objcMembers.- Управление памятью: Swift использует ARC автоматически. При работе с чистыми Objective-C API (например, Core Foundation) иногда требуются ручные вызовы
retain/releaseили использованиеUnmanaged. - Типы данных: Некоторые типы (например,
NSString*/String) конвертируются автоматически, другие (сложные структуры,NSArray*без дженериков) требуют явного приведения.
Практический совет: Минимизируйте двусторонние вызовы. Лучше инкапсулировать Objective-C логику в отдельные модули с четким Swift-интерфейсом.