如何解决如何将Swift Promise桥接到React Native
我正在将iOS本机SDK集成到React-Native中。我想从RN使用一个名为 <useSecurity>true</useSecurity>
<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy">
<denyAnonymousReadAccess>true</denyAnonymousReadAccess>
</authorizationStrategy>
的函数。我的第一次尝试是在闭包内调用SDK.getCardData
和resolve
:
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
?函数必须返回reject
,more here。
解决方法
找到了answer,只需要在参数中添加@转义即可:
@objc func fling(_ options: NSDictionary,resolver resolve: @escaping RCTPromiseResolveBlock,rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。