這兩者之間的語義差異非常狹窄,我發現自己想知道爲什麼兩種選擇都存在。它們在功能上有什麼不同,或者可能只是另一個的別名?Swift 3:DispatchQueue.main.async {}和DispatcQueue.main.async之間的區別(execute:{})?
3
A
回答
1
什麼你指的是被稱爲後關閉語法。這是一個讓封閉更容易使用的語法糖。
還有很多其他類型的語法糖特徵與封閉有關,我在我的回答中覆蓋了here。
與往常一樣,我強烈建議Swift Language guide,它在解釋這樣的基礎知識方面做得很好。
11
完全沒有區別。實際上,它們是相同的方法。
給編譯器,
myQueue.async(execute: { foo() })
是完全相同
myQueue.async {
foo()
}
當任何函數或方法的最後一個參數是一個函數,可以傳遞這樣的說法作爲後行閉合代替把它傳遞給參數列表。這樣做是爲了使高階函數(如DispatchQueue.async
)更像是語言的一部分,減少語法開銷並簡化特定於領域的語言的創建。
有關於尾部封閉語法here的文檔。
順便說一下,寫我的第一個例子中的慣用方法是:
myQueue.async(execute: foo)
相關問題
- 1. DispatchQueue.main.async和DispatchQueue.main.sync之間的區別
- 2. DispatchQueue.main.async和Dispatch.main.asyncAfter之間的區別(.now(),{})
- 3. Swift shell和Swift之間的區別
- 4. Clojure(3)和3之間的區別
- 5. Swift is和isKindOfClass()之間的區別?
- 6. Swift中Printable和DebugPrintable之間的區別
- 7. Swift中nil和()之間的區別
- 8. Int和Uint8之間的區別swift
- 9. 區別(3)中[[]] * 3和[[]]之間的區別]
- 10. Swift 3數據和NSData之間的區別
- 11. ASP.NET MVC 3和4之間的區別?
- 12. ASP.NET MVC 1和3之間的區別
- 13. Rails 3:Relation.count和Relation.ount.count之間的區別
- 14. varchar(3)和varchar(300)之間的區別
- 15. bindParam(),bindValue()和execute(array())之間有什麼區別和優點
- 16. `%in%`和`==`之間的區別
- 17. fmod和%之間的區別
- 18. '+ ='和'= +'之間的區別?
- 19. 快速3中Passkit和Applepay之間的區別?
- 20. Swift 3中Any,Hashable,AnyHashable之間有什麼區別?
- 21. 之間的〜/和的區別../
- 22. 創建的隊列和全局隊列之間的區別。 Swift 3
- 23. UserDefaults()和UserDefaults.standard之間的區別
- 24. '#','%'和'$'之間的區別
- 25. {!!之間的區別!!}和{{}}
- 26. 「。+」和「。+?」之間的區別
- 27. .eq之間的區別。和==
- 28. #。/和#之間的區別。 ./
- 29. !=和!之間的區別==
- 30. 「%〜dp0」和「。\」之間的區別?
在這種情況下,你也可以這樣做:'myQueue.async(execute:foo)':) – Alexander
我試圖讓並行更明顯,但是,這將是更習慣的方式:) –