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

如何使用纯Swift创建React Native原生模块,消除Objective-C代码?

完全消除React Native Swift模块的Objective-C桥接代码方案

有两种靠谱的方法可以彻底摆脱手动维护Objective-C桥接文件的麻烦:

方法一:使用React Native 0.68+的原生Swift模块支持

从RN 0.68版本开始,官方已经支持直接用Swift编写原生模块,不需要额外的Objective-C文件。只要按以下规则编写Swift代码即可:

  1. 让你的Swift类继承NSObject并实现RCTBridgeModule协议
  2. 实现moduleName()静态方法指定模块名称(对应JS里调用的模块名)
  3. 用@objc标记需要暴露给JS的方法
  4. 可选实现requiresMainQueueSetup()指定模块初始化线程

示例代码:

// Calendar.swift
import React

@objc(Calendar)
class Calendar: NSObject, RCTBridgeModule {
    // 必须实现:返回模块名称,和JS里调用的名字一致
    static func moduleName() -> String! {
        return "Calendar"
    }

    // 可选:指定是否在主线程初始化模块,默认返回true
    static func requiresMainQueueSetup() -> Bool {
        return true
    }

    // 用@objc标记暴露给JS的方法
    @objc
    func createEvent(_ title: String, location: String) {
        print(title, location)
    }
}

注意事项:

  • 确保你的RN版本在0.68及以上,低版本不支持这个特性
  • Swift类必须属于项目的主target,不能是静态库(如果是静态库需要额外配置)
  • 方法参数类型要和RN JS端兼容,比如String对应JS的字符串,NSNumber对应JS的数字/布尔值

方法二:用代码生成工具自动生成Objective-C桥接文件

如果你的RN版本较低,或者有特殊需求不能升级,可以用代码生成工具自动生成Objective-C桥接文件,避免手动维护。推荐用Sourcery(一个Swift代码生成工具):

  1. 安装Sourcery:用Homebrew安装brew install sourcery,或者通过CocoaPods集成
  2. 创建Sourcery模板文件(比如BridgeModule.stencil),内容如下:
{% for type in types.classes where type.annotations.bridgeModule %}
#import <React/RCTBridgeModule.h>

@interface RCT_EXTERN_MODULE({{ type.name }}, NSObject)
{% for method in type.methods where method.isObjc %}
{% let selector = method.objcSelector %}
RCT_EXTERN_METHOD({{ selector }})
{% endfor %}
@end
{% endfor %}
  1. 在你的Swift类上添加自定义注释@bridgeModule,标记需要生成桥接的模块:
// Calendar.swift
@objc(Calendar)
@bridgeModule
class Calendar: NSObject {
    @objc
    func createEvent(_ title: String, location: String) {
        print(title, location)
    }
}
  1. 运行Sourcery命令生成Objective-C文件:
sourcery --sources ./path/to/swift/files --templates ./path/to/BridgeModule.stencil --output ./path/to/output/folder

你可以把这个命令加到Xcode的Build Phases里,每次编译自动生成最新的桥接文件,完全不用手动修改Objective-C代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:42:52