2017-04-11 78 views

回答

1

什麼你指的是被稱爲後關閉語法。這是一個讓封閉更容易使用的語法糖。

還有很多其他類型的語法糖特徵與封閉有關,我在我的回答中覆蓋了here

與往常一樣,我強烈建議Swift Language guide,它在解釋這樣的基礎知識方面做得很好。

11

完全沒有區別。實際上,它們是相同的方法。

給編譯器,

myQueue.async(execute: { foo() }) 

是完全相同

myQueue.async { 
    foo() 
} 

當任何函數或方法的最後一個參數是一個函數,可以傳遞這樣的說法作爲後行閉合代替把它傳遞給參數列表。這樣做是爲了使高階函數(如DispatchQueue.async)更像是語言的一部分,減少語法開銷並簡化特定於領域的語言的創建。

有關於尾部封閉語法here的文檔。

順便說一下,寫我的第一個例子中的慣用方法是:

myQueue.async(execute: foo) 
+0

在這種情況下,你也可以這樣做:'myQueue.async(execute:foo)':) – Alexander

+0

我試圖讓並行更明顯,但是,這將是更習慣的方式:) –

相關問題