自动生成的“ModuleName-Swift.h”头文件不包括Swift类

时间:2014-11-03 22:27:13

标签: objective-c cocoa-touch swift

我试图从我的Objective-C实现文件中引用一些Swift定义的类,但由于某种原因,虽然我已经将头文件自动生成,但它似乎没有包含任何关于项目中的Swift类。

我的Swift类归属于@objc,即使在导入“-Swift.h”文件后,我仍然在编译时遇到“使用未声明的标识符”错误。

我无法弄清楚我错过了什么。我在项目中将Defines Modules设置为YES。

另外值得注意的是:如果我命令点击我的Obj-C文件中的符号,Xcode会在Swift文件中成功找到该定义。

2 个答案:

答案 0 :(得分:2)

确保在构建设置中进行了此设置:

Objective-C桥接标题:$(SRCROOT)/Sources/SwiftBridging.h

有时当您直接导入swift文件时,Xcode不会提示您添加桥接标头。即使你不从swift调用objective-c,它也是必须的步骤。

答案 1 :(得分:0)

您可能需要从NSObject派生。

我遇到了类似的情况,其中一些Swift类没有通过自动生成的头部暴露给Obj-C。解决方案是从NSObject派生Swift类。

class SwiftClassNotInHeader { }
class SwiftClassInHeader : NSObject { }

来自MyApp-Swift.h

SWIFT_CLASS("_TtC6Server18SwiftClassInHeader")
@interface SwiftClassInHeader : NSObject
- (SWIFT_NULLABILITY(nonnull) instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SwiftClassNotInHeader不在myApp-Swift.h中