[英]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.