如何将Swift Promise桥接到React Native

问题描述

我正在将iOS本机SDK集成到React-Native中。我想从RN使用一个名为 <useSecurity>true</useSecurity> <authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy"> <denyAnonymousReadAccess>true</denyAnonymousReadAccess> </authorizationStrategy> 函数。我的第一次尝试是在闭包内调用SDK.getCardDataresolve

reject

不幸的是,这引发了以下错误import Foundation import SDK @objc(SwiftComponentManager) class SwiftComponentManager: NSObject { @objc func getCardData(_ resolve: RCTPromiseResolveBlock,rejecter reject: RCTPromiseRejectBlock) -> Void { let cardId: String = "test" let secret: String = "test" SDK.getCardData(cardId,secret: secret) { (cardData,error) in if (error != nil) { reject(String(format: "Card data request Failed: %@",error!.localizedDescription)) } else { let pan = cardData!.pan let cvv = cardData!.cvv resolve(String(format: "Card data fetched successfully,pan: %@,cvv: %@",pan,cvv)) } } } @objc func testMethod() -> Void { print("This Does appear") } }

第二次尝试:

escaping closure captures non-escaping parameter 'resolve'

如何正确调用import Foundation import SDK import Promises @objc(SwiftComponentManager) class SwiftComponentManager: NSObject { @objc func getCardData(_ resolve: RCTPromiseResolveBlock,rejecter reject: RCTPromiseRejectBlock) -> Promise<CardData?> { let cardId: String = "test" let secret: String = "test" let promise = Promise<CardData?>() SDK.getCardData(cardId,error) in if (error != nil) { promise.reject(error) } else { let pan = cardData!.pan let cvv = cardData!.cvv promise.resolve(cardData) } } return promise } @objc func testMethod() -> Void { print("This Does appear") } } resolve函数必须返回rejectmore here

解决方法

找到了answer,只需要在参数中添加@转义即可:

@objc func fling(_ options: NSDictionary,resolver resolve: @escaping RCTPromiseResolveBlock,rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
...