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

React Native Turbo Module OC端返回修改后Person对象报错问题

解决Turbo Module OC实现中resolve Person对象时的未声明标识符错误

问题核心原因

你遇到的错误主要来自两点:一是Code Gen生成的Person属于不可变值对象,无法直接修改属性;二是OC语法错误(字符串未加@前缀),导致编译器对变量识别异常。

解决方案

  1. 修正OC字符串语法
    OC中字符串常量必须用@""包裹,把"updated name"改为@"updated name"。

  2. 创建新的Person实例返回
    Code Gen会为生成的类型自动生成构造方法(通常命名为[类型名]Create),需基于传入的person属性,修改目标字段后创建新实例再传给resolve。

修正后的示例代码

- (void)sendPersonRecieveModifedDepartment:(JS::NativeBlockidPlugin::Person &)person resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
    NSLog(@"%@", person.firstName());
    
    // 获取原对象的所有属性值
    NSString *updatedFirstName = @"updated name";
    NSString *lastName = person.lastName();
    JS::NativeBlockidPlugin::Employee employee = person.employee();
    
    // 通过构造方法创建新的Person实例
    JS::NativeBlockidPlugin::Person updatedPerson = JS::NativeBlockidPlugin::PersonCreate(updatedFirstName, lastName, employee);
    
    // 返回新实例
    resolve(updatedPerson);
}

额外说明

  • 若不确定构造方法的具体名称,可查看Code Gen生成的头文件(一般在ios/build/generated/ios/目录下对应模块的文件),找到Person类型的创建方法定义。
  • 传入的person是引用类型,但Code Gen生成的不可变对象不允许直接修改属性,必须通过构造新对象的方式返回修改后的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 02:28:09