在OC和Swift混编的过程中发现在OC中通过NSClassFromString获取不到Swift中的类,调研了一下发现问题所在,下面是我的解决方案:

Swift中关于NSClassFromString获取不到类的解决方案

Swift中关于NSClassFromString获取不到类的解决方案 - 敏捷大拇指 - Swift中关于NSClassFromString获取不到类的解决方案





问题的发现过程

[Swift] 纯文本查看 复制代码
UIViewController *destinationVC = [[NSClassFromString(demoInfoModel.demoVCName) alloc] init];
        [self.navigationController pushViewController:destinationVC animated:YES];


在使用以上代码时发现,Swift的通过类名在OC中通过NSClassFromString获取不到这个类,返回值为nil。




问题的原因和解决方法

经过一番查找后发现是因为在OC中Swift类中的所有类的接口都转到了一个叫 YourProduct_Example-swift.h 的头文件中, YourProduct 是你的工程名,其中的类名和方法都已经改变了,我们需要做的就行进入到这个头文件中,去找到对应的类名就行了,如下图所示:

Swift中关于NSClassFromString获取不到类的解决方案

Swift中关于NSClassFromString获取不到类的解决方案 - 敏捷大拇指 - Swift中关于NSClassFromString获取不到类的解决方案


红框里面的字符串就是你Swift里面转成OC后的类名,将之前的类名替换就行了,比如:

[Swift] 纯文本查看 复制代码
// 我之前的类名是WCLLoadingViewViewDemoVC
NSClassFromString(@"WCLLoadingViewViewDemoVC")
// 替换到OC中就是_TtC19CRAnimation_Example20WCLLoadingViewDemoVC
NSClassFromString(@"_TtC19CRAnimation_Example20WCLLoadingViewDemoVC")


通过以上步骤就能转换成功了。