Подтвердить что ты не робот

Import swift class в objective-c, <myModule> -Swift.h файл не найден

У меня есть проект iOS, написанный с помощью Objective-C. Я создал класс Swift в проекте, и заголовочный файл заголовка для доступа к objective-c в Swift сгенерирован успешно, и он отлично работает.

Моя проблема в другом. Я хочу импортировать класс Swift в код objective-c.

В xcode раздел target → Build Settings → Swift Compiler, я вижу поле Objective-C Generated Interface Header Name со значением myModule-Swift.h, но когда я импортирую этот заголовок в свой objective-c:

#import "myModule-Swift.h"

Я получаю ошибку компилятора:

myModule-Swift.h file not found

и в проекте я тоже не могу найти этот файл. Как я могу решить эту проблему?

Моя версия xcode равна 6.4

4b9b3361

Ответ 1

Обновлено май 2018 года Xcode 9.3


  1. Создайте Settings-> сгенерированное имя заголовка интерфейса Objective-C
    и установите значение YourModule-Swift.h (обычно это уже задано, это имя файла, которое необходимо импортировать в файл .m. #import "YourModule-Swift.h"

(Пример, проект с именем CData)

Example

  1. Как и в шаге 1, перейдите в "Настройки сборки" и найдите "Определить модуль", установите для обоих значений значение ДА

  2. Создайте класс, который расширяет NSObject в файле .swift

Example

  1. Создайте проект снова

  2. Импортировать файл YourModule-Swift.h в файл .m (обратите внимание, что он чувствителен к регистру, Mymodule! == MyModule)

enter image description here

Ответ 2

В случае, если кому-то интересно, почему после нескольких часов решения этой проблемы она все еще не решена, вы можете оказаться в ситуации, аналогичной моей, когда я фактически разрабатывал framework, а не приложение.

В этом случае формат оператора импорта для заголовка сгенерированного интерфейса Objective C выглядит следующим образом:


#import <ModuleName/ModuleName-Swift.h>

Ответ 3

OMG.. фактический оператор импорта не был "class-Swift.h", а скорее "projectname-Swift.h"

Вы можете найти имя файла, если вы смотрите в настройках сборки → Генерация кода Swift Compiler → Objective-C Имя заголовка сгенерированного интерфейса

Файл не был сгенерирован, когда я перетащил источник Swift в графический интерфейс. Только когда я щелкнул правой кнопкой мыши- > Добавить файл в "проект". Затем он попросил сгенерировать файлы заголовков.

Ответ 4

Мое дополнение к Даниэлю Кромсу:

  • Никогда не добавляйте заголовок -Swift.h в заголовок. Даже если это сработает. Добавьте только импорт в .m файл!

  • В случае, если вы используете в своих классах swread для заголовка, сделайте переднее объявление @class swiftclass перед объявлением @interface

Затем вы увидите свои реальные ошибки в своем коде.

Ответ 5

Для меня проблема заключалась в том, что у меня был бит-код. Когда я нажал кнопку "Обновить до рекомендуемых параметров проекта", он изменил несколько настроек, которые, вероятно, были виновниками. Я включил "Включенный биткод" в "Нет" в настройках сборки и теперь исправлен.

введите описание изображения здесь

Ответ 6

Я долгое время складывал это. В моем случае мое целевое имя - это что-то вроде "my-app", использующее тире в качестве части имени цели. Я попытался #import "my-app-Swift.h", но Xcode продолжал давать мне ошибки.

Я вырыл в папке "DerivedData" и нашел "my_app-Swift.h". Поэтому, если вы используете некоторые интересные символы для целевого имени. Вы можете попробовать заменить символы подчеркивания _.

Ответ 7

Я столкнулся с тем же вопросом вчера и работал часами, чтобы исправить это безрезультатно. Другие, возможно, были в той же лодке, что и я. Я выполнил все описанные выше шаги, но ничего не получилось.

Причиной разрыва мины было из-за артефактов имени проекта по всему моему проекту (из-за неправильного изменения имени).

Если все вышеперечисленные шаги завершатся неудачно, я бы предложил сделать так, как я сделал, и переименовать ваш проект, чтобы Xcode мог reset somethings... Это решило проблему для меня. Это сработало как шарм!

Ответ 8

В моем случае я забыл проверить быструю платформу для целей/классов, которые я использовал, действительно конкретный случай, но это может помочь кому-то в будущем.