我的Xcode桥接头文件似乎没有包含我的Swift类
我认为我已经把所有事情都按部就班地做完了。
我在我的Objective-C项目中添加了一个小的Swift文件。这是项目中的代码,而不是框架中的代码,因此我没有使用 public 关键字:
import Foundation
@objc TestClass: NSObject {
@objc init(){}
}
添加这个文件后会提示创建bridging header,并且它应该把TestClass添加进去。
我把import语句添加到了Objective-C的 .m文件中。没有产生错误,所以这个文件应该是存在的:
#import "SoftServePro-Bridging-Header.h"
我在.h文件中为该类的一个实例创建了一个属性:
@property(nonatomic,strong) TestClass *test;
并把它声明为 @class:
@class SSPMasterViewController,iMag,TestClass;
我清理了项目并进行了一次预编译,以让bridging header填充完成。
在 构建设置 -> 打包 中,将Defines Module设置为Yes。
我在.m代码中添加了一行来创建TestClass:
self.test=[[TestClass alloc]init];
因此,我得到的错误信息如下:

现在,在我看来,这似乎是TestClass不在我的bridging header中的原因,因为如果在的话,它应该能准确地知道TestClass是什么,而不仅仅是把它视为一个前向声明。
我还没有找到任何办法在预编译之后查看bridging header的实际内容,因此不知道TestClass是否存在。
唯一没有遵循的是,我所读的文档说bridging header应该放在与.xcodeproj文件同一个文件夹里,但Xcode把它放在所有源代码文件同一个文件夹里(往下一层),我又岂能和Xcode争论呢??
解决方案
你误解了bridging header的作用。你应该把想要暴露给Swift的 Objective-C声明放在bridging header中,这和你现在要做的恰恰相反。
要在Objective-C中使用Swift的东西,只需要导入XXX-Swift.h(其中XXX是 Swift模块名),而不是bridging header。
例如,如果Swift模块名为 ExampleModule,你应该在Objective-C类的头文件中添加
#import "ExampleModule-Swift.h"