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

React Native绑定OC API遇_Bool参数错误:需扩展RCTConvert支持

解决React Native与Objective-C桥接中_Bool参数类型错误问题

问题原因

你遇到的错误是因为React Native的RCTConvert工具类默认没有对C语言的_Bool类型(也就是你代码里写的bool)提供转换支持,而Objective-C中常用的BOOL类型(本质是signed char)是有内置转换逻辑的。


解决方案1:改用Objective-C的BOOL类型(推荐)

最简单的修复方式是把方法参数的bool类型替换为Objective-C标准的BOOL,这样RCTConvert可以自动处理类型转换,无需额外扩展。修改后的RcpRfidApi.m代码如下:

#import "RcpRfidApi.h"

@implementation RcpRfidApi

RCT_EXPORT_MODULE(RcpRfidApi);

- (NSDictionary *)constantsToExport {
    return @{@"greeting": @"Welcome to the DevDactic\n React Native Tutorial!"};
}

// 将参数类型从bool改为BOOL,同时规范参数命名
RCT_EXPORT_METHOD(setReaderPower:(BOOL)on callback:(RCTResponseSenderBlock)callback) {
    callback(@[[NSNull null], [NSNumber numberWithBool:on]]);
}

@end

这里我还调整了方法的参数命名格式,把原来的连续冒号写法改成了更符合OC编码规范的命名式参数,这样在React Native端调用时参数含义会更清晰。


解决方案2:扩展RCTConvert支持_Bool类型(如果必须使用bool)

如果你因为业务或依赖原因必须使用C语言的bool类型,可以通过给RCTConvert添加分类来扩展类型转换支持:

  1. 创建RCTConvert+Bool.h头文件:
#import <React/RCTConvert.h>

@interface RCTConvert (Bool)

+ (_Bool)_Bool:(id)json;

@end
  1. 创建RCTConvert+Bool.m实现文件:
#import "RCTConvert+Bool.h"

@implementation RCTConvert (Bool)

+ (_Bool)_Bool:(id)json {
    BOOL value = [self BOOL:json];
    return (value == YES) ? 1 : 0;
}

@end

最后在你的RcpRfidApi.m文件顶部导入这个分类头文件,React Native就能正确识别并转换bool类型的参数了。


React Native端调用示例

不管采用哪种方案,你都可以在React代码中这样调用原生方法:

import { NativeModules } from 'react-native';
const { RcpRfidApi } = NativeModules;

// 方式1:使用Promise风格(React Native会自动把回调转为Promise)
RcpRfidApi.setReaderPower(true)
  .then(isPowerOn => {
    console.log('阅读器电源状态:', isPowerOn);
  })
  .catch(error => {
    console.error('调用出错:', error);
  });

// 方式2:使用原始回调函数
RcpRfidApi.setReaderPower(false, (error, isPowerOn) => {
  if (error) {
    console.error('调用出错:', error);
  } else {
    console.log('阅读器电源状态:', isPowerOn);
  }
});

内容的提问来源于stack exchange,提问作者user3415686

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:42:34