Быстрые классы не найдены в проекте Objective-C

Я работаю над проектом iOS, разработанным с использованием Objective-C. Мне нужно интегрировать в него некоторые файлы Swift. Итак, сделал следующее:

  1. Добавлен новый файл Swift с именем "temp", чтобы MyProject-Bridging-Header.h добавлен моей Xcode IDE (версия 9.1).
  2. Добавил файлы Swift, которые я хочу использовать, в проект.
  3. Изменены настройки цели Defines Module ДА.
  4. Аналогично, "Имя модуля продукта" установлено в "MyProject".
  5. Я могу видеть MyProject-swift.h имя файла для параметра "Имя заголовка сгенерированного интерфейса Objective-C".
  6. Добавлен оператор импорта для myProject-swift.h в одном из моих файлов Objective-C .m и смог успешно построить проект.
  7. Я проверил в Finder, что myProject-swift.h был создан.
  8. Гарантировал префикс @obj в объявлении классов Swift.

Тем не менее, когда я пытаюсь использовать любой из классов Swift, тогда я получаю ошибку времени компиляции "Пользователь необъявленного идентификатора".

В чем может быть причина проблемы? Я что-то пропустил?

2 ответа

Догадаться...

Мне не хватало предварительного объявления класса swift в моем классе ObjC. Все, что мне нужно было сделать, это добавить следующее заявление перед объявлением интерфейса в файле.h.

@class MySwiftClassName;

После того, как заявление было добавлено, оно успешно строится.

[обновление Xcode 14]

Чтобы сделать классы Swift доступными для Objective-C

Процесс:

  1. Наследовать классы отNSObject
  2. Дать атрибут@objcMembersнепосредственно в классы Swift или выборочно@objcожидаемым членам классов.
  3. В заголовках классов ObjC, где вы хотите использовать классы Swift, добавьте объявления классов Swift.@class SwiftClassXXX;
  4. соответственно, в файлах классов ObjC, где вы хотите использовать классы Swift, #import заголовок, который будет автоматически сгенерирован компилятором. Если ваш проект называетсяMyProject, автоматический заголовок будет (Sкапитал).
  5. Используйте классы Swift в своих.m's

Вы можете изменить или проверитьMyProject-Swift.hавтоматическое имя заголовка, проверкаPRODUCT_MODULE_NAMEв настройках сборки — и измените, если хотите.

Другие вопросы по тегам