2016-09-17 82 views
1

請幫我這條線轉換爲SWIFT 3.0:隊列和斯威夫特3問題

dispatch_async(DispatchQueue.global(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)) 

又是什麼恰恰意味着?像這樣:在主隊列中的括號內執行代碼?

在此先感謝。

ps。這行代碼是從apple's code採取核心數據進行工作

回答

7

在斯威夫特3你可以像這樣

DispatchQueue.global(qos: .background).async { 

} 

寫它的意思是每個支架之間寫的代碼將在後臺執行。如果你想在這個後臺線程中做任何修改,你必須切換到主線程。通過編寫下面的塊。

dispatch_async(dispatch_get_main_queue()) { 
    // Your code for UI Changes. 
} 

編輯:斯威夫特3

DispatchQueue.main.async { 
} 
+0

'DispatchQueue.main.async {}'或'DispatchQueue.main.sync {}'。對於主隊列。 – Zico

+0

'dispatch_async(DispatchQueue.global(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0))''0'怎麼辦?我如何設置'0' – 2016-10-19 06:08:41

2

一個在大中央調度(GDC)模式中最常見的任務是在全球背景隊列執行的工作,並儘快更新主隊列中的用戶界面因爲工作已經完成。新的API看起來像這樣:

DispatchQueue.global(attributes: [.qosDefault]).async { 
    // Background thread 
    DispatchQueue.main.async(execute: { 
     // UI Updates 
    }) 
} 

隊列現在在init上獲取屬性。這是一個Swift optionSet,可以包含隊列選項,例如串行vs併發,內存和活動管理選項以及服務質量(.default,.userInteractive,.userInitiated,.utility和.background)。

新變化:

  • DISPATCH_QUEUE_PRIORITY_HIGH: - > .userInitiated
  • DISPATCH_QUEUE_PRIORITY_DEFAULT: - > .DEFAULT
  • DISPATCH_QUEUE_PRIORITY_LOW: - > .utility
  • DISPATCH_QUEUE_PRIORITY_BACKGROUND: - >系統技術領域

如果你想了解更多,這是一個很好的談話https://developer.apple.com/videos/play/wwdc2016/720/

+0

感謝您的幫助! –