【问题标题】:How to bridge a Swift Promise to React Native如何将 Swift Promise 桥接到 React Native
【发布时间】:2020-12-03 05:54:24
【问题描述】:

我正在将 iOS 原生 SDK 集成到 React-Native。我想从 RN 中使用一个名为 SDK.getCardData 的函数。我的第一次尝试是在闭包内调用resolvereject

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, secret: secret) { (cardData, 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?函数返回Voidmore here很重要。

【问题讨论】:

    标签: swift react-native promise react-native-ios bridge


    【解决方案1】:

    找到answer,只需在参数中添加@escaping:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-12
      • 1970-01-01
      • 2023-04-11
      • 2019-09-23
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      相关资源
      最近更新 更多