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

标签 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 文件。有哪些选择?

最佳答案

这可以通过在实现 .m 文件中包含 Project-Swift.h header 而不是 header 文件,并在 header 中使用前向声明来解决,例如@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
...

请注意,如果 objective-c 类被声明为实现 Swift 声明的协议(protocol)之一,您可能需要将“Project-Swift.h”导入放在类头导入之前。

关于ios - 如果 Objective-C 文件包含 Project-Swift.h 的导入,如何将其导入到桥接 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34931301/

相关文章:

iphone - 代码正确时,UILabel 中的删除键不起作用

ios - 谷歌登出

ios - 为什么我的 UITableViewCell 中的多行 UILabel 在第一次加载时被截断,但在滚动时会自行更正?

swift - textDidChange 指向错误的 NSCollectionViewItem

c++ - 在 Swift 中包含 C++ 头文件

ios - 未找到 Swift 桥接头文件

ios - 有什么方法可以检测它何时触及 Apple Pay PKPaymentAuthorizationViewController 上的取消按钮?

iphone - 创建一个调度方法以在 Objective C (Xcode) 中以 7 天轮换显示自定义标签

ios - 使用 SpriteKit 为 iPhone X 调整屏幕大小

facebook - swift:Xcode 无法为 Facebook 框架生成 Swift 表示