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参数标签的隐式转换导致出错:
- 修改Swift代码:
// 显式指定暴露给OC的方法名,和桥接声明完全对齐 @objc(getPassesOf:resolve:reject:) func getPassesOf(_ test: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) { print("===================================================") print(test) resolve("cus") }
- 对应修改OC桥接文件的方法声明:
RCT_EXTERN_METHOD(getPassesOf:(NSString *)test resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
内容的提问来源于stack exchange,提问作者Lukáš Šálek
相关产品推荐
相关产品推荐

