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

How to import Objective-C file to bridging header if it contains an import of 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'

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

这可以通过在实现 .m 文件中包含 Project-Swift.h header 而不是 header 文件,并在 header,例如@class SomeClass, @protocol SomeProtocol.

当您有两个 class 依赖一个 each-other 时,该解决方案与 Objective-C 解决方案相同。

例如,给定以下 header 文件:

#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 文件中,并像这样更新您的 header 文件:

@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
...

请注意,如果 objective-c class 是,您可能需要将 "Project-Swift.h" 导入放在 class header 导入之前声明实施 Swift 声明的协议之一。