我试图从我的Objective-C实现文件中引用一些Swift定义的类,但由于某种原因,虽然我已经将头文件自动生成,但它似乎没有包含任何关于项目中的Swift类。
我的Swift类归属于@objc
,即使在导入“-Swift.h”文件后,我仍然在编译时遇到“使用未声明的标识符”错误。
我无法弄清楚我错过了什么。我在项目中将Defines Modules
设置为YES。
另外值得注意的是:如果我命令点击我的Obj-C文件中的符号,Xcode会在Swift文件中成功找到该定义。
答案 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中