1

我正在尝试通过来自 react-native 的 Bridge 来实现 Amazon FireTV 的代码。我的目标是向远程播放器发送信号,然后解析 RCTPromiseResolveBlock 以便在我的 javascript 中等待该函数。

@objc func fling(_ options: NSDictionary, _ resolve: RCTPromiseResolveBlock, rejecter reject: RCTPromiseRejectBlock) -> Void {
  let player = getDeviceFromUuid(uuid:uuid) // instance of RemoteMediaPlayer
  // ... more code
  let bftask = player?.setMediaSourceToURL(
    url,
    metaData:metaData,
    autoPlay:true,
    andPlayInBackground:false)

  bftask?.continue({ (task:BFTask) -> Void in
    if task.error != nil {
      reject() // <-- These are "non-escaping parameters captured in an escaping closure"
    } else {  
      resolve() // <-- 
    }
  })

上面的代码抛出Escaping closure captures non-escaping parameter. 我如何允许拒绝和解决在关闭中可用?或者更广泛地说,我如何执行异步请求setMediaSourceToURL,等待它完成,然后解决承诺块?

作为参考,BFTask 是https://github.com/facebookarchive/Bolts-ObjC的一个工件。它的界面建议如下:

BFTask 接口选项

我期待着你们,IOS 世界的奇才。

4

1 回答 1

1

好的。只需要添加@escaping论点:

@objc func fling(_ options: NSDictionary, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
...
于 2020-03-06T02:08:09.123 回答