背景
如何使用原生提供的服务,给用户提供更好的体验和复用端上原有功能
如何实现React调用 swift
步骤 1. create native module
// ReactSwiftDemo
// Created by alex on 2025/9/22.
import Foundation
import React
@objc(MyNativeModule)
class MyNativeModule: NSObject, RCTBridgeModule {
@objc
static func moduleName() -> String! {
return "MyNativeModule"
}
@objc
static func requiresMainQueueSetup() -> Bool {
return false
}
@objc
func sayHello(_ name: String) {
print("Hello, \(name)!")
}
}
步骤2. provide a header file for native module
// MyNativeModule.m
#import <React/RCTBridgeModule.h>
@interface RCT_EXTERN_MODULE(MyNativeModule, NSObject)
RCT_EXTERN_METHOD(sayHello:(NSString *)name)
@end
步骤 3. use your native module
<Button title="say hello" onPress={() => {
MyNativeModule.sayHello("123");
}} />
如何获取swift 的返回结果
答案:
- callback: RCTResponseSenderBlock, 或者
- resolver: RCTPromiseResolveBlock
- rejecter: RCTPromiseRejectBlock
// 计算两个数的和 - 使用 Callback
@objc
func calcAsync(_ a: Int, b: Int, callback: @escaping RCTResponseSenderBlock) {
// 在异步线程中计算
DispatchQueue.global().async {
let result = a + b
callback([result])
}
}
// MyNativeModule.m
#import <React/RCTBridgeModule.h>
@interface RCT_EXTERN_MODULE(MyNativeModule, NSObject)
RCT_EXTERN_METHOD(sayHello:(NSString *)name)
RCT_EXTERN_METHOD(calcAsync:(NSInteger)a b:(NSInteger)b callback:(RCTResponseSenderBlock)callback)
@end
MyNativeModule.calcAsync(1, 2, (result: any) => {
console.log('result', result);
});