Быстрые классы не найдены в проекте Objective-C
Я работаю над проектом iOS, разработанным с использованием Objective-C. Мне нужно интегрировать в него некоторые файлы Swift. Итак, сделал следующее:
- Добавлен новый файл Swift с именем "temp", чтобы
MyProject-Bridging-Header.h
добавлен моей Xcode IDE (версия 9.1). - Добавил файлы Swift, которые я хочу использовать, в проект.
- Изменены настройки цели
Defines Module
ДА. - Аналогично, "Имя модуля продукта" установлено в "MyProject".
- Я могу видеть
MyProject-swift.h
имя файла для параметра "Имя заголовка сгенерированного интерфейса Objective-C". - Добавлен оператор импорта для
myProject-swift.h
в одном из моих файлов Objective-C .m и смог успешно построить проект. - Я проверил в Finder, что
myProject-swift.h
был создан. - Гарантировал префикс @obj в объявлении классов Swift.
Тем не менее, когда я пытаюсь использовать любой из классов Swift, тогда я получаю ошибку времени компиляции "Пользователь необъявленного идентификатора".
В чем может быть причина проблемы? Я что-то пропустил?
2 ответа
Догадаться...
Мне не хватало предварительного объявления класса swift в моем классе ObjC. Все, что мне нужно было сделать, это добавить следующее заявление перед объявлением интерфейса в файле.h.
@class MySwiftClassName;
После того, как заявление было добавлено, оно успешно строится.
[обновление Xcode 14]
Чтобы сделать классы Swift доступными для Objective-C
Процесс:
- Наследовать классы от
NSObject
- Дать атрибут
@objcMembers
непосредственно в классы Swift или выборочно@objc
ожидаемым членам классов. - В заголовках классов ObjC, где вы хотите использовать классы Swift, добавьте объявления классов Swift.
@class SwiftClassXXX;
- соответственно, в файлах классов ObjC, где вы хотите использовать классы Swift, #import заголовок, который будет автоматически сгенерирован компилятором. Если ваш проект называется
MyProject
, автоматический заголовок будет (S
капитал). - Используйте классы Swift в своих
.m
's
Вы можете изменить или проверитьMyProject-Swift.h
автоматическое имя заголовка, проверкаPRODUCT_MODULE_NAME
в настройках сборки — и измените, если хотите.