2016-01-21 3 views
0

Итак, проблема идет как есть. У меня есть файл, который содержит:Как импортировать файл Objective-C для соединения заголовка, если он содержит импорт Project-Swift.h

#import "Project-Swift.h" 

И я хочу добавить этот файл в свой BridgingHeader. Так что, когда я пытаюсь скомпилировать его, ошибка заключается в следующем:

'Project/Project-Swift.h' file not found 
#import "Project-Swift.h" 
     ^
<unknown>:0: error: failed to import bridging header 'path/to/my/folder/Project/BridgingHeader.h' 

Я не могу удалить #import "Project-Swift.h" из этого .h файла, как это нужно там. И я также хочу использовать этот файл Objc в Swift. Каковы варианты?

ответ

1

Это может быть разрешено путем включения заголовка Project-Swift.h в файл реализации .m вместо файла заголовка и с помощью форвардных объявлений в заголовке, например. @class SomeClass, @protocol SomeProtocol.

Решение идентично решению Objective-C, когда у вас есть два класса в зависимости друг от друга.

Например, если следующий файл заголовка:

#import "Project-Swift.h" 

@interface MyObjcClass: NSObject 

@property SomeSwiftClass *aProperty; 
@property id<SomeSwiftProtocol> delegate; 

.m и файл, как этот

#import "MyObjClass.h" 

@implementation MyObjcClass 
... 

, вам нужно переместить #import "Project-Swift.h" в файл .m, и обновить файл заголовка например:

@class SomeSwiftClass; 
@protocol SomeSwiftProtocol; 

@interface MyObjcClass: NSObject 

@property SomeSwiftClass *aProperty; 
@property id<SomeSwiftProtocol> delegate; 

@end 

и .m файлов, как это:

#import "Project-Swift.h" 
#import "MyObjClass.h" 

@implementation MyObjcClass 
... 

Обратите внимание, что вы, вероятно, необходимо поместить «Проект-Swift.h» импорт до одного для вашего импорта заголовка класса, если класс Objective-C объявляется реализовать один из Свифт объявил протоколы.

+0

Да, спасибо, только небольшая проблема заключается в том, что он показывает предупреждение: не удается найти определение протокола для «ARTPasscodeKeyboardControllerDelegate» – Lonkly

+0

Добавили ли вы объявление вперед для протокола и включили его заголовок в файл '.m'? Возможно, вам придется добавить этот заголовок до того, где вы определяете свой класс, если протокол является частью определения класса. – Cristik

+0

вопрос - этот протокол объявлен в быстром файле. Я добавил объявление @protocol, но оно все еще показывает предупреждение – Lonkly

 Смежные вопросы

  • Нет связанных вопросов^_^