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

Swift转Objective-C:React Native模块中Braintree 3DS方法等效实现

问题:React Native Objective-C模块中实现Braintree 3DSecure的onLookupComplete等效方法

我正在查阅Braintree的iOS开发文档,文档推荐实现如下Swift方法:

func onLookupComplete(_ request: BTThreeDSecureRequest, result: BTThreeDSecureLookup, next: @escaping () -> Void) {
  // 可选:检查lookup结果,若需要验证挑战则准备UI
  next()
}

我的目标是在React Native的Objective-C模块中实现等效代码,该模块的函数定义示例如下:

RCT_EXPORT_METHOD(getAddressLine1: (NSString *)address 
  callback: (RCTResponseSenderBlock)callback)
{ ... }

请问该Swift实现的Objective-C等效代码是什么,尤其是next: @escaping部分的处理?


等效Objective-C实现代码

核心方法的Objective-C版本

Swift中的@escaping () -> Void在Objective-C中对应无参数无返回值的dispatch_block_t(也可自定义block类型),Objective-C的block默认具备逃逸特性,无需额外修饰。对应Braintree方法的实现如下:

- (void)onLookupComplete:(BTThreeDSecureRequest *)request result:(BTThreeDSecureLookup *)result next:(dispatch_block_t)next {
    // 可选逻辑:检查lookup结果,若需验证挑战则准备UI
    // 调用next block继续流程
    next();
}

结合React Native模块的完整示例

如果需要在React Native模块中集成该逻辑,将Braintree的回调结果同步到JS层,可参考以下代码:

#import <Braintree/Braintree.h>
#import <React/RCTEventEmitter.h>
#import <React/RCTBridgeModule.h>

@interface Braintree3DSecureModule : RCTEventEmitter <RCTBridgeModule>
@end

@implementation Braintree3DSecureModule

RCT_EXPORT_MODULE(Braintree3DSecure);

// 封装3DSecure lookup流程供JS调用
RCT_EXPORT_METHOD(startLookup:(NSDictionary *)params callback:(RCTResponseSenderBlock)callback) {
    // 构造Braintree请求对象
    BTThreeDSecureRequest *request = [[BTThreeDSecureRequest alloc] init];
    // 根据传入参数填充request(示例:从params取订单金额)
    request.amount = params[@"amount"];
    
    // 初始化3DSecure客户端(需提前配置好yourAPIClient)
    BTThreeDSecureClient *threeDSClient = [[BTThreeDSecureClient alloc] initWithAPIClient:yourAPIClient];
    
    [threeDSClient performLookup:request completion:^(BTThreeDSecureLookup * _Nullable result, NSError * _Nullable error) {
        if (error) {
            callback(@[RCTMakeError(error.localizedDescription, error, nil)]);
            return;
        }
        
        // 调用自定义的lookup完成处理逻辑
        [self onLookupComplete:request result:result next:^{
            // 处理完成后通知JS层
            callback(@[[NSNull null], result]);
        }];
    }];
}

// 对应Swift的onLookupComplete方法
- (void)onLookupComplete:(BTThreeDSecureRequest *)request result:(BTThreeDSecureLookup *)result next:(dispatch_block_t)next {
    // 自定义逻辑:检查是否需要用户验证挑战
    if (result.requiresUserAuthentication) {
        NSLog(@"需要3DSecure验证挑战,可在此处加载原生验证UI");
    }
    
    // 执行next block推进流程
    next();
}

@end

关键说明

  1. 逃逸闭包处理:Objective-C中没有@escaping修饰符,所有作为参数传递的block默认会被保留(具备逃逸特性),直接调用即可。
  2. React Native回调衔接:通过RCTResponseSenderBlock将原生层结果传递给JS,在next block中触发回调可保证流程顺序正确。
  3. 依赖导入:确保已正确导入Braintree和React Native的头文件,并配置好Braintree客户端实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:26:16