简体   繁体   中英

Run swift code on main thread in react-native

I am trying to make a react-native app cast to chromecast. The chromecast GCKDeviceScanner has to run on the main thread.

The react native page says to run on main thread you have to do this:

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

I am not very familiar with swift or ios, so where do I put this code, and how do I use it? I have my method:

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

Any idea on how I can run my code on the main thread?

To run that code section in the main thread, you can do this:

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

Another option is RunLoop.main.perform { .. } .

Old version, before Swift 4 (maybe even 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
  }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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