不能使用自动生成的 Swift 桥接头

Posted

技术标签:

【中文标题】不能使用自动生成的 Swift 桥接头【英文标题】:Can't use autogenerated Swift bridging header 【发布时间】:2017-10-31 20:30:17 【问题描述】:

我正在尝试在 Objective-C 类中使用自动生成的 Swift 桥接头,但是当我尝试包含它时,我在桥接头中遇到了很多错误。由于标头是自动生成的,因此根本不清楚我可能有什么问题。

在一个 Objective-C 类中,如果我声明以下行,我将得到构建错误 - 没有此行,没有错误并且构建正常:

#import "Oilist-Swift.h"

编辑:我刚刚将#import "Oilist-Swift.h" 语句移到了所有其他标头都已导入之后,现在我只收到与MFMailComposeViewControllerDelegate 相关的错误,并且可能还有一个与PopupStoreControllerDelegate 相关的错误。以下是所有错误:

Angle brackets contain both a protocol ('PopupStoreControllerDelegate') and a type ('MFMailComposeViewControllerDelegate')

Unknown class name 'MFMailComposeViewControllerDelegate'; did you mean 'MFMailComposeViewController'?
Replace 'MFMailComposeViewControllerDelegate' with 'MFMailComposeViewController'

- (void)mailComposeController:(MFMailComposeViewController * _Nonnull)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError * _Nullable)error;
  Expected a type (MFMailComposeResult)

我已经查找了循环引用,但目前找不到。

任何见解都将不胜感激!

现在看起来真的很接近了——它似乎只是出于某种未知原因对 MFMail 不满意。

【问题讨论】:

看来你的 PopupStoreControllerDelegate 不能在 Objective-C 中使用。你在声明中使用了@objc 吗?您还可能需要在头文件中添加转发@protocol PopupStoreControllerDelegate; 嗯 - PopupStoreControllerDelegate 来自一个 Objective-C 类。您建议将@protocol 添加到哪个头文件? 【参考方案1】:

如果我导入 MessageUI.h 它现在可以工作。 (尽管在导入 Swift 标头的类中根本没有使用 MessageUI)。

我想我必须导入 MessageUI,因为它在桥接头中被引用并且不包含 MessageUI 内容的定义...

解决方案:

#import <MessageUI/MessageUI.h>
#import "Oilist-Swift.h"

【讨论】:

以上是关于不能使用自动生成的 Swift 桥接头的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C Swift 桥接头

不能在带有 Xcode 11 包管理器的 Swift 包中包含 C 文件

Swift - 桥接头失败。 “*”没有名为“*”的成员

Swift 编译器 - 代码生成

无法导入桥接头 xcode 6.4

Swift:导入桥接头失败