Swift子模块协议导入Objective-C类报错,如何解决?
问题:Objective-C类中导入Swift子模块协议时提示找不到声明
我正在开发一款App,部分子模块(.xcproject)采用Swift编写,主目标的部分内部模块采用Objective-C编写,此前一切正常。
现在想在Objective-C类中实现某Swift子模块的功能,项目其余部分通过遵循协议的扩展将依赖导入父类,示例代码如下:
// Swift 代码 @objc public protocol MyProtocol { } class ParentClass: MyProtocol { } // 这样所有子类都能继承父类的协议遵循 class ChildClass: ParentClass { }
我已在可正常识别的桥接头文件中添加:
#import <MySubModule/MySubModule.h>
在Objective-C类中导入MainApp-Swift.h后,尝试让扩展遵循协议时出现错误:Cannot find protocol declaration for MyProtocolFromSubModule,尽管子模块已添加且协议存在于MainApp-Swift.h中,相关代码如下:
@interface SomeClassIExtend (SWIFT_EXTENSION(MainApp)) <MyProtocolFromSubModule> @end
解决方案
将Swift子模块中的协议修改为Objective-C兼容协议,同时确保协议在子模块中公开并导出,具体操作:
- 确保协议添加
@objc修饰符(已有则跳过),保证Objective-C可识别 - 协议需用
public修饰,确保能被外部模块访问 - 在子模块配置中确认该协议已导出到模块头文件中
完成上述操作后,即可通过导入子模块的方式在Objective-C中正常访问该协议。
内容的提问来源于stack exchange,提问作者Ruben Mim
相关产品推荐
相关产品推荐

