簡體   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