У меня есть проект, который был начат в Objective-C, и я пытаюсь импортировать некоторый код Swift в те же файлы классов, в которых я ранее писал Objective-C.
Я проконсультировался с документами Apple об использовании Swift и Objective-C в том же проекте, а также с таким вопросом SO , но все равно безрезультатно: я продолжаю получать сообщение об ошибке «файл не найден» после ввода #import "NewTestApp-Swift.h"
( NewTestApp
это имя продукта и модуль).
Вот что я сделал до сих пор:
- В
Define Modules
, выбранныйYES
для приложения. - Убедитесь, что в названии модуля продукта нет места (см. Снимок экрана ниже, вопрос)
Я попытался с помощью #import "NewTestApp-Swift.h"
внутри ViewController.m
, ViewController.h
и , AppDelegate.m
но ни один из них не работал.
Что еще я делаю неправильно? Спасибо за вашу помощь.
Скриншот настроек:
Ошибки, с которыми я сейчас сталкиваюсь:
~/Library/Developer/Xcode/DerivedData
помогло мне.Ответы:
Я столкнулся с той же проблемой и не смог заставить мой проект быстро импортировать в классы obj-c. Используя Xcode 6 (должен работать для Xcode 6+) и смог сделать это таким образом ....
@class MySwiftClass;
#import "ProductModuleName-Swift.h"
Ссылка на документацию Apple об этом
https://developer.apple.com/documentation/swift/imported_c_and_objective-c_apis/importing_swift_into_objective-c
источник
-
символ, то имя сгенерированного файла заголовка будет преобразовано в_
. например, если название вашего продуктаMy-App
, вы должны импортироватьMy_App-Swift.h
.Objective-C Generated Interface Header Name
, бинго!Если код Swift находится внутри модуля (как в вашем случае):
Если код Swift находится внутри проекта (смешанный Swift и ObjC):
В вашем случае вам нужно добавить эту строку в файл * .m:
ВАЖНО: посмотрите на "<" в операторе импорта
https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html
источник
<NewTestApp-Swift/NewTestApp-Swift.h>
,<NewTestApp/NewTestApp-Swift.h>
и<NewTestApp/ViewController-Swift.h>
все внутриViewController.m
, но продолжаю получать ошибку «файл не найден», несмотряCleaning
на проект каждый раз после попытки комбинации. Я включил снимок экрана в текст вопроса на случай, если это поможет.ViewController.m
. Я только пытался сначала импортировать заголовки, чтобы попытаться заставить его принять код Swift. Я буду смешивать и сопоставлять код Objective-C и Swift вViewController.m
.Как мне удалось импортировать swift в objective-c:
В вашем ViewController.m импортируйте быстрый код с помощью:
За последний фрагмент этой головоломки спасибо Swiftoverload за то, что он сообщил мне о фактическом добавлении файла Swift через графический интерфейс Xcode, а не просто перетаскивал существующие swift-файлы в мой проект, чтобы он работал: http://nikolakirev.com/blog / используя-скор-в-Objective-C-проекта
источник
Define Module
иProduct Module Name
?-
в имени будут преобразованы в символы подчеркивания ,_
а такжеИспользуя Xcode 8.2.1, и если вы посмотрите Project > Build Settings> Objective-C Generated Interface Header Name , там будет показан только один файл заголовка с именем Product созданного с помощью -Swift.h
Это означает, что вместо того, чтобы импортировать каждый модуль отдельно из файла .m Objective-C, используя отдельный файл -Swift.h, вы просто импортируете один продукт -Swift.h, который объединяет все модули Swift.
Я столкнулся с той же проблемой, ища традиционный способ импорта модулей по отдельности, но текущая версия Xcode и Swift 3 изменила его, чтобы использовать только один заголовок для импорта всех модулей.
источник
-Swift.h
файл заголовка. Принуждение их всех (у меня есть 5 целей) к использованию общего файла заголовка устранило проблему для меня.Потратив час на решение этой проблемы, выполните следующие действия, чтобы понять, чего не хватает:
источник
У меня возникли проблемы с импортом Swift в проект Objective-C. В конце концов я заглянул в папку Derivied Data, чтобы проверить, что генерирует Xcode 7. Имя файла полностью отличалось от того, которое я ожидал.
Получив фактическое имя файла, я импортировал его, и проект можно было построить.
источник
-Swift.h
должен быть создан Xcode автоматически, если код Swift предоставляет API через@objc
или@objcMembers
[About]Обычно локация выглядит как
Это может быть изменено
По умолчанию значение равно
$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
источник
ОПРЕДЕЛЕНИЕ МОДУЛЕЙ: ДА и импортируйте "ProjectName-Swift.h" в файл .m класса Obj-C.
Это помогло мне получить доступ к классам Swift в Obj-c.
источник
Столкнулся с той же проблемой с моей командой, когда работал над проектом с использованием git. Один разработчик не обновил Xcode до последней версии (7.3), которая требовалась для последней версии Swift 2.2. Итак, компилятор не распознал новый синтаксис Swift и не смог сгенерировать интерфейс для библиотеки Swift (имя проекта-swift.h). Проверьте, является ли версия Xcode последней!
источник
Во время разработки может существовать вероятность того, что у вас будет какой-либо класс swift, который не полностью реализован, из-за чего могут возникнуть некоторые синтаксические ошибки. Файл заголовка swift будет доступен для использования только в том случае, если все файлы swift не содержат ошибок.
Убедитесь, что в файлах swift нет синтаксических ошибок, а затем попробуйте импортировать заголовок swift в файл objective-c
источник
Импорт файла заголовка, т.е.
в файле .h возникла ошибка, в которой говорится:
и сборка не удалась.
Вместо этого используйте:
в файле .m, и даже если появляется та же ошибка, запуск проекта в любом случае подавляет ошибку.
Затем классы swift доступны в файле .m.
источник
У меня возникла проблема с названием проекта (цели). В нем есть символ «-». Итак, решение было следующее: если имя проекта - «Test-App», то имя импортированного класса - «Test_App-Swift.h».
источник
Если в имени вашего приложения есть какой-либо специальный символ, используйте _ для специального символа.
Например, если ваше приложение называется "Test App®"
Затем вы можете импортировать быстрый файл с помощью «Test_App_-Swift.h».
Пробел и ® заменяются на _ во время импорта.
источник
Если у вас несколько целей, убедитесь, что вы собрали все фреймворки.
источник
Xcode 11
Я столкнулся с этой проблемой при создании Xcode 11. Мне потребовалось немного времени, чтобы понять, что было не так, но по сути, я изменил параметр «Отображаемое имя» на вкладке «Общие» цели вместо изменения непосредственно в
Info.plist
файле через Вкладка «Информация» на Таргете.Это привело к тому, что Xcode 11.5 прошел через переписывание / создание множества совершенно новых пользовательских настроек сборки и изменение имени модуля приложения и созданного продукта .app. В этом случае новое имя дисплей также имел прямой слэш (
/
) символ в ней , которые могут в конечном счете, именно поэтому он не строит (см @Silversky Technology «s ответ ).Тем не менее, я решил эту проблему, отменив все автоматические изменения Xcode 11.5 в файле проекта и вручную сделав то же изменение в отображаемом имени пакета в
Info.plist
файле, и все работает отлично.Я бы хотел, чтобы он сказал вам, что он делал такие вещи, прежде чем он просто запустился и сделал это без вашего согласия.
источник
Убедитесь, что ваш быстрый класс имеет публичное объявление и расширяет NSObject:
Импорт должен работать в кавычках, а не в скобках, если класс swift находится в том же проекте.
источник
если вы сначала добавите Swift File, не забудьте добавить быстрый файл к вашей цели ... в левом столбце
источник