You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Objective-C代码中使用导入的Swift协议与类?

问题原因

你遇到的编译报错是因为 Objective-C中协议类型的声明语法错误:Plugin是协议类型不是类类型,不存在Plugin*这种写法,所以编译器识别不到Plugin标识符。

解决方案

按以下两步修改代码即可正常运行:

  1. 修正协议对象的声明语法:Objective-C中声明遵守某协议的对象,统一使用id<协议名>的格式
  2. 修正方法调用名: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:09:00