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

Swift实现RN原生模块带参Promise方法报错无法识别Objective-C方法

问题根因

OC桥接文件中声明的getPassesOf方法签名,和Swift代码暴露给OC运行时的方法签名不匹配,导致RN调用时找不到对应方法抛出异常。

解决方案

你可以任选以下一种方案修改,修改完成后需要清理Xcode缓存(删除DerivedData目录)再重新编译项目,避免旧缓存导致修改不生效:

方案1:修正OC桥接文件的方法声明

你当前桥接文件中的getPassesOf声明缺少了resolve参数的外部标签,和Swift生成的OC签名不一致,将桥接文件对应的行修改为以下内容即可:

RCT_EXTERN_METHOD(getPassesOf:(NSString *)test resolve:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)

方案2:显式指定Swift方法暴露给OC的签名(更稳妥,避免隐式生成签名不匹配问题)

直接在Swift代码的@objc注解中手动指定OC侧的方法名,避免Swift参数标签的隐式转换导致出错:

  1. 修改Swift代码:
// 显式指定暴露给OC的方法名,和桥接声明完全对齐
@objc(getPassesOf:resolve:reject:)
func getPassesOf(_ test: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
    print("===================================================")
    print(test)
    resolve("cus")
}
  1. 对应修改OC桥接文件的方法声明:
RCT_EXTERN_METHOD(getPassesOf:(NSString *)test resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)

内容的提问来源于stack exchange,提问作者Lukáš Šálek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:57:04