React Native Turbo Module OC端返回修改后Person对象报错问题
解决Turbo Module OC实现中resolve Person对象时的未声明标识符错误
问题核心原因
你遇到的错误主要来自两点:一是Code Gen生成的Person属于不可变值对象,无法直接修改属性;二是OC语法错误(字符串未加@前缀),导致编译器对变量识别异常。
解决方案
修正OC字符串语法
OC中字符串常量必须用@""包裹,把"updated name"改为@"updated name"。创建新的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
相关产品推荐
相关产品推荐

