问题描述
我正在将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 {
...