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
Ответы
Ответ 1
Обновлено май 2018 года Xcode 9.3
- Создайте Settings-> сгенерированное имя заголовка интерфейса Objective-C
и установите значение YourModule-Swift.h (обычно это уже задано, это имя файла, которое необходимо импортировать в файл .m. #import "YourModule-Swift.h"
(Пример, проект с именем CData
)
![Example]()
Как и в шаге 1, перейдите в "Настройки сборки" и найдите "Определить модуль", установите для обоих значений значение ДА
Создайте класс, который расширяет NSObject
в файле .swift
![Example]()
Создайте проект снова
Импортировать файл 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
В моем случае я забыл проверить быструю платформу для целей/классов, которые я использовал, действительно конкретный случай, но это может помочь кому-то в будущем.