前言
這個應該是我在100Days of Swift的一個章節裡看到的概念,它的作用就是把閉包的東西縮短,真的很短。
正文
借用100Days of Swift的例子:
假如我們新增一個函式如下,但它有個「傳入型別跟傳出型別都是String」的閉包叫action:

這時候,我們開始呼叫閉包,我們可以很清楚的知道,呼叫的時候,func travel( )的func、( )少掉了,func本來就可以省略,而( )則因為裡面沒有其他重要參數,所以也省掉了,後面就是一個引數的內容,藉由in隔開了(place:String)->String

但因為在宣告函式的時候,就已經宣告了型別的傳入與傳出,所以Swift會認定呼叫閉包的時候傳入、傳出型別都是String,所以可以在步驟一中省略引數型別,

在步驟二中,省略傳出型別,

步驟三中,整個都省略,因為一定會回傳String這個這個值,Swift知道,所以這回連return也可以省略,畢竟它是一定會回傳的東西,
而在return中的place的位置,可以藉由$0取代,這個叫做參數名稱縮寫,然後我記得如果有多少個參數,就可以依序以$0、$1、$2……等等的命名。

不過要記得一件事情:這種替代是方便開發者做事情,而不要看到看起來很簡便,就一直用,如果參數沒有幾個的話,這樣用是很方便的,但假若多起來,可能就不是那麼好管理的一件事情了。
閉包還有很多種…..可能還會花時間討論一下非逃逸閉包(nonescape closure)、自動閉包(auto closure)