myProjectName-Swift.h не найден после чистой сборки - PullRequest
0 голосов
/ 19 октября 2018

Потратил много времени на поиск решения в Google и SO, но безуспешно.Очень надеюсь, что кто-то может указать, в чем может быть проблема.

Итак, у меня есть objc + swift project .У меня есть Bridging Header файл с imports заголовочными файлами Objc, которые мне нужно использовать в Swift.

Чтобы объяснить проблему, я поделюсь двумя сценариями.В 1-м сценарии все работает отлично.Во втором показывается ошибка.

Обратите внимание: оба сценария имеют одинаковую кодовую базу.

Сценарий 1. Не работает, отображается ошибка.

  1. Я открываю проект.
  2. Hard Clean it.
  3. Build
  4. Показывает ошибку: 'myProjectName-Swift.h' file not found
  5. Также отображаются такиеошибка:

не удалось создать предварительно скомпилированный заголовок '/Users/tungfam/Library/Developer/Xcode/DerivedData/myProjectName-ctxxkwqtckhvyoawavmuzmdxqaml/Build/Intermediates.nocompjectHeader-ader-ader-ader_ader-swift_1UP5PCPCLBPHP-clang_18PVO5108TD8S.pch 'для мостового заголовка' /Users/tungfam/Developer/myProjectName/myProjectName/App/myProjectName-Bridging-Header.h'

* 1033 как сделать из Sario
  1. Я беру тот же код из сценария 1.
  2. Hard Clean it
  3. Комментарий imports в Bridging Header файле
  4. Комментарийкод Swift, где я использовал файлы Obc (которые были объявлены в заголовке моста, который я только что прокомментировал впредыдущий шаг)
  5. Я строю проект.Это удается.
  6. Так как некоторые части в приложении не работают, потому что я прокомментировал материал.Я раскомментирую файл imports in Bridging Header и код Swift, где я использовал классы Objc.
  7. Запустите снова (без аппаратной очистки), и все будет работать.

Очень ценюлюбая помощь по этому вопросу.Пожалуйста, поделитесь всем, что, по вашему мнению, может помочь решить эту проблему.

Я использую Xcode 10.0;Swift 4.2

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

UPDATE2: я прочитал что-то вроде: «Если вы импортируете файл Objc с именем ABC в заголовок моста. И если этот ABC импортируетв себя файл myProjectName-Swift.h. Тогда в этом случае могут возникнуть некоторые проблемы. Как вы думаете, это может быть правдой?

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Вы не должны использовать #import "ProjectName-Swift.h" в заголовочных файлах.

Если вам нужны классы или протоколы Swift в коде Obj-C, вы можете объявить их в соответствующем заголовке Obj-C.Вот дополнительная информация об этом:

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

// MyObjcClass.h
@class MySwiftClass;
@protocol MySwiftProtocol;

@interface MyObjcClass : NSObject
- (MySwiftClass *)returnSwiftClassInstance;
- (id <MySwiftProtocol>)returnInstanceAdoptingSwiftProtocol;
// ...
@end

Также обратите внимание, что у вас могут возникнуть проблемы с импортом Swift Enums иПротоколы и классы в ObjC, поэтому вам может понадобиться явно определить элементы, которые вы хотите, чтобы они были доступны для кода ObjC, с ключевым словом @objc.

И вы не сможете использовать структуры Swift в Obj-C.

0 голосов
/ 19 октября 2018

От Swift до Objective C вам просто нужно использовать #import "ProjectName-Swift.h" в ваших классах Objective C, которым необходим доступ к коду Swift.Нет необходимости добавлять в заголовочный файл моста.В противном случае вам нужно объявить Objective C для Swift в заголовочном файле моста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...