LoginSignup
0
0

More than 5 years have passed since last update.

在 main queue 執行 - Swift 3 調整記

Last updated at Posted at 2016-08-08

引言

這在開發日常應該經常碰到:當 http request 返回時,必須要在 main queue 裡面更新 UI

那這篇就是來講怎麼用 swift 讓程式碼的執行緒切換到 main queue 上。

原本的寫法

dispatch_async(dispatch_get_main_queue()) {
    // 程式碼片段 ...
}

這個寫法有點像 C 的全域 function 的寫法,在執行 dispatch_async 這個 function 的同時,透過另外一個 function 取得 main queue ,於是再把要做的事情包成 closure 作為參數傳入這個 function 。

這大概是從 GCD 出廠以來,變更最少的寫法之一。

Swift/iOS 10 之後的寫法

取用的方法直覺很囉,而且不囉唆很多:

DispatchQueue.main.async {
    // 程式碼片段 ...
}

取用 main queue 的方式也從原本的 dispatch_get_main_queue() 很冗長的方式,改成取用 DispatchQueuemain 就可以在 main queue 上執行。

除了閱讀上可能會比較容易理解之外,撰寫時的自動完成速度等可能也會變得比較快。

心得和小結

從 Objective-C 轉換到 Swift 時, 寫 GCD 相關的程式碼,也是令我比較困擾的地方。

當 Xcode 6 剛出來的時候,到 Xcode 7 對於自動完成有稍微改善之前,

原始的 C 相關的 syntax 要自動完成變得不是很方便;再來也和 Swift 撰寫的風格不一樣。所以在寫這一類的程式碼時,寫 code 的速度就會被稍微降下來一點點:一來是他無法自動完成,二來就算是有備選,但是想要的總是不是在最前面, function 字數又非常長。

這個情形之下,又長、又複雜的呼叫方式就變得有點麻煩了。

不過自從新的 SDK 出來之後,他變得不像碎碎念的老頭:用了比較簡單的方式,讓我們可以比較快速的達到我們想要撰寫的內容。無論是自動完成或是手動完整打完 GCD 的程式碼都快了很多。

期待發現更多漂亮的寫法~ :laughing:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0