如何在Objective-C代码中使用导入的Swift协议与类?
问题原因
你遇到的编译报错是因为 Objective-C中协议类型的声明语法错误:Plugin是协议类型不是类类型,不存在Plugin*这种写法,所以编译器识别不到Plugin标识符。
解决方案
按以下两步修改代码即可正常运行:
- 修正协议对象的声明语法:Objective-C中声明遵守某协议的对象,统一使用
id<协议名>的格式 - 修正方法调用名:Swift中定义的
onDevicePackageReceived(np:)方法桥接到Objective-C后,会自动生成符合ObjC命名规范的方法名onDevicePackageReceivedWithNp:,需要使用桥接后的名称调用
完整可运行代码示例
// 确保你的.m文件顶部已正确导入Swift自动生成的桥接头 #import "My_App_Name-Swift.h" // 遍历调用逻辑改写为 for (id<Plugin> plugin in [_plugins allValues]) { // 可选增加安全校验,避免异常类型导致崩溃 if ([plugin respondsToSelector:@selector(onDevicePackageReceivedWithNp:)]) { BOOL isHandled = [plugin onDevicePackageReceivedWithNp:np]; // 可根据业务需要使用返回值,比如处理后打断循环:if (isHandled) break; } }
额外说明
你之前在头文件中加的@protocol Plugin;前向声明是正确的,不需要额外修改桥接配置,仅调整上述语法问题即可。
内容的提问来源于stack exchange,提问作者Lucas W
相关产品推荐
相关产品推荐

