繁体   English   中英

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

[英]Run swift code on main thread in react-native

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

反应本机页面说要在主线程上运行,您必须这样做:

 - (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
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM