React Native 0.76.0新架构(Turbo Modules)与Swift集成方案咨询
React Native新架构(Turbo Modules)Swift集成方案
问题背景
RN 0.76.0默认启用新架构(Turbo Modules),现有iOS原生代码以Swift为核心逻辑,通过Objective-C接口对外暴露。已完成纯Objective-C的Turbo Module测试实现,需扩展代码让Swift承担核心逻辑,实现Swift与Turbo Modules(ObjC++)的对接。
现有可运行代码
RCTNativeTestModule.h
// // RCTNativeTestModule.h // RnTurboModuleTryout // // #import <Foundation/Foundation.h> #import <NativeTestModuleSpec/NativeTestModuleSpec.h> NS_ASSUME_NONNULL_BEGIN @interface RCTNativeTestModule : NSObject <NativeTestModuleSpec> @end NS_ASSUME_NONNULL_END
RCTNativeTestModule.m
// // RCTNativeTestModule.m // RnTurboModuleTryout // // #import "RCTNativeTestModule.h" @implementation RCTNativeTestModule RCT_EXPORT_MODULE(NativeTestModule) (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const facebook::react::ObjCTurboModule::InitParams &)params { return std::make_shared<facebook::react::NativeTestModuleSpecJSI>(params); } - (NSDictionary *)getAnswer { NSDictionary *dict = @{@"answer": @"Hello, here is the answer"}; return dict; } @end
解决方案:Swift核心逻辑对接Turbo Module
步骤1:编写Swift核心业务类
创建Swift类封装核心逻辑,需添加@objc修饰并继承NSObject,确保Objective-C可调用:
// SwiftTestCore.swift import Foundation @objc(SwiftTestCore) class SwiftTestCore: NSObject { @objc func getAnswer() -> [String: String] { return ["answer": "Hello from Swift Core Logic!"] } }
步骤2:修改Objective-C Turbo Module,桥接调用Swift
修改RCTNativeTestModule.m,导入自动生成的Swift桥接头文件,将原核心逻辑替换为调用Swift类的方法:
#import "RCTNativeTestModule.h" #import "RnTurboModuleTryout-Swift.h" // 替换为你的项目名-Swift.h @implementation RCTNativeTestModule RCT_EXPORT_MODULE(NativeTestModule) (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const facebook::react::ObjCTurboModule::InitParams &)params { return std::make_shared<facebook::react::NativeTestModuleSpecJSI>(params); } - (NSDictionary *)getAnswer { // 调用Swift核心类的方法 SwiftTestCore *coreInstance = [[SwiftTestCore alloc] init]; return [coreInstance getAnswer]; } @end
步骤3:项目配置检查
- 确保项目中至少存在一个Swift文件(已创建的
SwiftTestCore.swift),Xcode会自动生成项目名-Swift.h桥接头文件 - 导入桥接头文件时,文件名需与项目Bundle Identifier一致,区分大小写
- 若使用静态库/框架,需在Build Settings中设置
Defines Module为YES,Module Name与项目名保持一致
步骤4:验证对接效果
运行RN项目,调用NativeTestModule.getAnswer(),即可获取来自Swift核心逻辑的返回值。
关键注意事项
- Turbo Module的接口层仍依赖ObjC++实现(由Spec生成),Swift仅负责核心业务逻辑,通过ObjC桥接层完成调用
- Swift类必须添加
@objc修饰并继承NSObject,才能被Objective-C识别 - Swift方法的参数和返回值需使用Objective-C兼容类型(如
[String: String]),避免纯Swift类型导致桥接失败
内容的提问来源于stack exchange,提问作者zerobertel
相关产品推荐
相关产品推荐

