Swift访问Objective-C枚举时单元测试报「Cannot find type in scope」错误如何解决
解决方案
核心原因
框架主目标可以正常访问枚举,是因为已经正确配置了头文件的引入规则,单元测试目标没有匹配对应的头文件访问权限,按以下步骤操作即可解决:
- 确认头文件成员归属
打开CertificateType.h的右侧文件检查面板,在Target Membership栏中,除勾选框架主目标外,需同时勾选单元测试目标;如果该枚举是对外公开的API,确保它已被添加到框架主目标Build Phase的Headers栏下的Public分组中。 - 配置框架模块导出
打开框架的伞头文件(命名为{框架名}.h的公开头文件),添加以下引入代码:
配置完成后,无论是框架主目标还是单元测试目标,只要执行#import <{你的框架名称}/CertificateType.h>import {你的框架名称}就可以直接访问CertificateType枚举。 - 单元测试单独桥接(可选)
如果不想把该枚举加入公开头列表,可给单元测试目标单独创建Objective-C桥接文件,命名为{单元测试目标名}-Bridging-Header.h,在桥接文件中引入枚举头:
之后在单元测试目标的Build Settings中,找到#import "CertificateType.h"Objective-C Bridging Header配置项,填入桥接文件的相对路径即可。 - 配置校验
操作完成后清理项目缓存(快捷键Shift+Command+K)后重新编译,如果仍报错,检查单元测试目标Build Settings的Header Search Paths中是否包含枚举头文件所在的目录,路径需标记为recursive。
内容的提问来源于stack exchange,提问作者Srinivas
相关产品推荐
相关产品推荐

