ios - 在 react-native 的主线程上运行 swift 代码

标签 ios swift react-native

我正在尝试将 native react 应用程序转换到 chromecast。 chromecast GCKDeviceScanner 必须在主线程上运行。

React Native 页面说要在主线程上运行你必须这样做:

- (dispatch_queue_t)methodQueue
{
  return dispatch_get_main_queue();
}

我对swift和ios不是很熟悉,那么这段代码放在哪里,怎么用呢?我有我的方法:

let filterCriteria = GCKFilterCriteria(forAvailableApplicationWithID: "myApp")
    
    let deviceScanner = GCKDeviceScanner(filterCriteria: filterCriteria)
    if let deviceScanner = deviceScanner {
      deviceScanner.addListener(self)
      deviceScanner.startScan()
      deviceScanner.passiveScan = true
    }

关于如何在主线程上运行我的代码有什么想法吗?

最佳答案

要在主线程中运行该代码部分,您可以这样做:

DispatchQueue.main.async {
  let filterCriteria = GCKFilterCriteria(forAvailableApplicationWithID: "myApp")
  
  let deviceScanner = GCKDeviceScanner(filterCriteria: filterCriteria)
  if let deviceScanner = deviceScanner {
    deviceScanner.addListener(self)
    deviceScanner.startScan()
    deviceScanner.passiveScan = true
  }
}

另一个选项是 RunLoop.main.perform { .. }

旧版本,在 Swift 4(甚至可能是 3?)之前:

dispatch_async(dispatch_get_main_queue()) {
  let filterCriteria = GCKFilterCriteria(forAvailableApplicationWithID: "myApp")
  
  let deviceScanner = GCKDeviceScanner(filterCriteria: filterCriteria)
  if let deviceScanner = deviceScanner {
    deviceScanner.addListener(self)
    deviceScanner.startScan()
    deviceScanner.passiveScan = true
  }
}

关于ios - 在 react-native 的主线程上运行 swift 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39232647/

相关文章:

swift - 如何使用新的 swift async/await 方法上传数据?

ios - 添加附件后,自定义 UITableViewCell 的大小不正确

android - react native ListView : cannot read property of undefined

javascript - 如何使用 react-native 将图像放在相机 View 的顶部

ios - 警告“开发人员工具访问需要控制另一个进程才能继续调试。输入您的密码以允许此操作。”

ios - Mvvm交叉/Xamarin "This class is not key value coding-compliant for the key"

ios - Xcode 4 经常崩溃

ios - Xcode 7.1 "The request timed out."错误

Swift:带有 "complex"数据的 pList

react-native - 来自 console.log 的消息在 React Native 调试器 Reactotron 中不可见