如果Objective-C文件包含Project-Swift.h的导入,如何将Objective-C文件导入桥接头

时间:2016-01-21 18:16:35

标签: ios swift bridging-header

所以,问题就是这样。我有一个包含以下内容的文件:

#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'

我无法从此.h文件中删除#import "Project-Swift.h",因为它在那里需要。我还想在Swift中使用这个Objc文件。有什么选择?

1 个答案:

答案 0 :(得分: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
...

请注意,您可能需要放置&#34; Project-Swift.h&#34;如果声明objective-c类实现Swift声明的协议之一,则在您的类头导入之前导入。