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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 21:35:13