在 main queue 執行 - Swift 3 調整記
引言
這在開發日常應該經常碰到:當 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()
很冗長的方式,改成取用 DispatchQueue
的 main
就可以在 main queue 上執行。
除了閱讀上可能會比較容易理解之外,撰寫時的自動完成速度等可能也會變得比較快。
心得和小結
從 Objective-C 轉換到 Swift 時, 寫 GCD 相關的程式碼,也是令我比較困擾的地方。
當 Xcode 6 剛出來的時候,到 Xcode 7 對於自動完成有稍微改善之前,
原始的 C 相關的 syntax 要自動完成變得不是很方便;再來也和 Swift 撰寫的風格不一樣。所以在寫這一類的程式碼時,寫 code 的速度就會被稍微降下來一點點:一來是他無法自動完成,二來就算是有備選,但是想要的總是不是在最前面, function 字數又非常長。
這個情形之下,又長、又複雜的呼叫方式就變得有點麻煩了。
不過自從新的 SDK 出來之後,他變得不像碎碎念的老頭:用了比較簡單的方式,讓我們可以比較快速的達到我們想要撰寫的內容。無論是自動完成或是手動完整打完 GCD 的程式碼都快了很多。
期待發現更多漂亮的寫法~
Author And Source
この問題について(在 main queue 執行 - Swift 3 調整記), 我々は、より多くの情報をここで見つけました https://qiita.com/vc7/items/d930a8ff98c9b2b93644著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .