it-swarm.com.ru

Импорт Project-Swift.h в класс Objective-C ... файл не найден

У меня есть проект, который был запущен в Objective-C, и я пытаюсь импортировать некоторый код Swift в те же файлы классов, в которых я ранее написал Objective-C.

Я проконсультировался с Apple docs об использовании Swift и Objective-C в том же проекте, а также SO question вот так, но все равно безрезультатно: я продолжаю получать файл не обнаружена ошибка после ввода #import "NewTestApp-Swift.h" (NewTestApp - это название продукта и модуля).

Вот что я сделал до сих пор:

  1. В Define Modules выбрано YES для приложения.
  2. Убедитесь, что в имени модуля продукта не было пробела (см. Скриншот ниже вопроса)

Я пытался использовать #import "NewTestApp-Swift.h" внутри ViewController.m, ViewController.h и AppDelegate.m, но ни один из них не сработал. 

Что еще я делаю неправильно? Спасибо за вашу помощь.


Скриншот настроек:

enter image description here


Ошибки, с которыми я сейчас сталкиваюсь:

enter image description here

98
daspianist

Я столкнулся с той же проблемой и не смог заставить мой проект импортировать Swift в классы obj-c. Используя Xcode 6, (должен работать для Xcode 6+) и смог сделать это таким образом ....

  1. Любой класс, к которому вам нужно получить доступ к в файле .h, должен быть таким же предварительным объявлением

@class MySwiftClass;

  1. ТОЛЬКО в файле .m, если код находится в том же проекте (модуле), то вам нужно импортировать его с

#import "ProductModuleName-Swift.h

Ссылка на документацию Apple об этом

https://developer.Apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//Apple_ref/doc/uid/TP40014216-CH10-XID_87

116
bolnad

Если код Swift находится внутри модуля (как в вашем случае):

#import <ProductName/ProductModuleName-Swift.h>

Если код Swift находится внутри проекта (смешанный Swift и ObjC):

#import <ProductModuleName-Swift.h>

В вашем случае вы должны добавить эту строку в файл * .m:

#import <NewTestApp/NewTestApp-Swift.h>

ВАЖНО: посмотрите на «<» в операторе импорта

https://developer.Apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

74
ikocel1

Как мне удалось импортировать Swift в target-c:

  • Определяет модуль установлен в YES (на проекте - не на цели)
  • Имя модуля продукта установлено (на цели - не на проекте)
  • В вашем ViewController.m импортируйте код Swift с помощью:

    #import "MyProductModuleName-Swift.h"
    
  • Добавьте файл Swift в ваш проект target-c (File -> New -> Swift), и Xcode создаст соединительный заголовок из target-c в Swift , но это крайне важно, чтобы он работал с другими и наоборот - видимо.

За последний фрагмент этой головоломки спасибо Swiftoverload за то, что он сообщил мне о фактическом добавлении файла Swift через графический интерфейс Xcode, а не просто перетаскивании существующих Swift-файлов в мой проект, чтобы заставить его работать: http: // nikolakirev.com/blog/using-Swift-in-objective-c-project

47
holm50

Используя Xcode 8.2.1 и если вы посмотрите на Project> Настройки сборки> Имя заголовка сгенерированного интерфейса Objective-C , там будет показано только один файл заголовка, названный как Product - Swift.h

Это означает, что вместо импорта каждого модуля отдельно из файла Objective-C .m, используя отдельный файл -Swift.h, вы просто импортируете один Product -Swift.h, который объединяет все модули Swift.

Я столкнулся с той же проблемой, когда искал традиционный способ импорта модулей по отдельности, но текущая версия Xcode и Swift 3 изменила его, чтобы использовать только один заголовок для импорта всех модулей.

10
petershine

У меня были проблемы с импортом Swift в проект Objective-C. В конце я заглянул в папку «Производные данные», чтобы проверить, что генерирует Xcode 7. Имя файла полностью отличалось от того, которое я ожидал.

Как только у меня появилось реальное имя файла, я импортировал его, и проект можно было построить.

5
Josh B

ОПРЕДЕЛИТЬ МОДУЛИ: ДА И импортировать «ProjectName-Swift.h» в файл .m класса Obj-C

Это помогло мне получить доступ к классам Swift в Obj-c.

2
YSR fan

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

Убедитесь, что в файлах Swift нет синтаксических ошибок, а затем попытайтесь импортировать заголовок Swift в файл target - c. 

1
Gurunath Sripad

Потратил час на решение этой проблемы, выполнив следующие действия, чтобы понять, чего не хватает:

  1. Откройте настройки XCode и перейдите в папку DerivedData.
  2. Искать "Swift.h" в Finder
  3. Если вы не можете найти файл project-Swift.h, этот файл не был создан. Обычно вам нужно добавить @objc в один из ваших классов Swift и успешно собрать приложение, только тогда Xcode сгенерирует этот файл
  4. Если вы нашли файл «xxx-Swift.h», убедитесь, что ваш оператор импорта содержит правильное имя.

 how-to-locate-Swift-file

1
Jakehao

Импортировать заголовочный файл, т.е.

#import "<ProjectName>-Swift.h" 

в .h файле сгенерировал ошибку, заявив:

-Swift.h 'файл не найден

и сборка не удалась.

Вместо этого используйте:

#import "<ProjectName>-Swift.h"

в файле .m, и, несмотря на то, что появляется та же ошибка, запуск проекта в любом случае подавляет ошибку.

Затем классы Swift доступны в файле .m.

1
Claytog

Столкнулся с той же проблемой с моей командой, когда работал над проектом с использованием git. Один разработчик не обновил Xcode до последней версии (7.3), которая требовалась для последней версии Swift 2.2. Таким образом, компилятор не распознал новый синтаксис Swift и не смог сгенерировать интерфейс для библиотеки Swift (projectname-Swift.h). Проверьте, последняя ли версия Xcode!

1
Artem Loginov

Я столкнулся с проблемой с названием проекта (цель). В него включен символ «-». Поэтому решение было следующим: если имя проекта «Test-App», то имя импортируемого класса - «Test_App-Swift.h».

0
opochtovy