Swift转Objective-C后指针类型不兼容引发崩溃问题求助
解决Swift-OC混编中类型不匹配导致的警告与崩溃问题
这个问题我在多端混编项目里碰过好几次,本质就是参数类型不兼容引发的,咱们一步步来解决:
先明确类型关系
首先得搞清楚CWPWEntity和CWPWModule的类层级:- 如果
CWPWEntity本应是CWPWModule的子类,那要检查Swift中的子类定义是否加了@objc标记,比如:
要是没加@objc class CWPWEntity: CWPWModule { // 类实现 }@objc,OC的头文件里识别不到继承关系,会把两者当成完全独立的类型,自然会报类型不匹配警告。 - 如果这两个类本来就没有继承关系,那就是你调用时传错了参数!函数要求的是
CWPWModule类型实例,你传了CWPWEntity,类型不兼容必然导致崩溃,这时候要么修正调用逻辑传正确的实例,要么调整Swift函数的参数类型。
- 如果
检查Swift函数的原始定义
回到Swift代码里,确认addFromServiceWithSource:的参数类型是不是你真正想要的。比如你是不是误把参数写成了CWPWModule,实际应该是CWPWEntity?如果是定义错误,修改Swift里的参数类型后,重新生成Project-swift.h文件,OC端的调用就能正常匹配了。关于
_Nonnull的说明
这个是Swift默认生成的非空注解,它不是导致崩溃的直接原因——只是让OC端的类型不匹配警告更明确了而已,核心问题还是类型不对。排查崩溃细节
如果还是找不到问题,可以在崩溃断点处查看调用栈,或者用LLDB命令po entityType打印对象的实际类型,确认它是否真的是CWPWModule(或其子类)的实例,有时候可能是对象初始化时被错误创建成了其他类型。
内容的提问来源于stack exchange,提问作者Parv Bhasker
相关产品推荐
相关产品推荐

