Swift4 Day-10 Closure ( 1 )

Albert
Albert
Sep 6, 2018 · 4 min read

閉包是功能獨立的區塊,可以在程式之間被傳遞及使用。像是之前提到的巢狀函式 ( Nested Function ),就是一種閉包。

閉包有三種表示方式:

・函式就是一種有名字的閉包
・巢狀函式是一種有名字且被包在其他函式中的閉包
・閉包表達式是使用簡潔的語法來描述一種沒有名字的閉包,可以在程式之間傳遞及使用。

Sorted

Swift 提供了一種叫做 sorted的方法,根據我們提供的排序閉包,將已知類型數組的值進行排序,一旦排序完成,sorted 會回傳與原數組類型大小完全相同的數組,這個新數組是已經排序好的。我們可以用 sorted() 去使用 sorted 的功能,再沒有特別設定之下,sorted的功能就是將 Array 中的數值從小到大排列,字串則是照字母順序:

如果我們想要讓 Array 由大到小排序 ( 字串則反之 ),可以透過定義 function,並使用 sorted(by: ):

閉包表達式:

閉包表達式 ( Closure Expression ) 是一種用簡潔語法建立匿名函式的方式。同時提共了優化語法,可以使程式碼變得更好讀。

{(參數)-> 返回值型別 in
內部程式
}

從上面的程式看到,與一般函式相同的是閉包同樣有一個大括號將程式包起來,不過省略了名稱,包著參數的小括號放到大括號裡面,接著返回型別,再接一個 in 執行內部程式

在這邊我們不是建立一個 function,而是將這些參數及回傳值等等包在一個大括號中,最後再用 in 導入內部程式

從上下文推斷型別

因為排序閉包是實際參數傳遞給函數,所以 Swift 可以判斷他的形式參數類型及回傳型別

單表達式閉包隱式回傳

單行表達式閉包可以透過隱藏 return 來隱式回傳單行表達式的結果

參數名稱縮寫

Swift 為閉包提供參數名稱縮寫功能,能直接以 $0, $1, $2 這種方式來依序呼叫閉包的參數。如果使用了參數名稱縮寫,就可以省略閉包參數列表中對其定義,而且對應參數名稱縮寫的型別會透過函式型別自動推斷,所以 in 也會同被省略

運算子函式

Swift 的 String 定義了關於大於符號等特定符號的實現,與 sorted 所需要的相符合

今天的 Closure 就到這裡囉!如果有其他的問題歡迎留言或是寄信給我!\(*´∀`)/

Albert 的 Swift4 語法集:

Swift4 Day-01 基本語法
Swift4 Day-02 Option 及 nil
Swift4 Day-03 集合類型 — Array
Swift4 Day-04 集合類型 — Set
Swift4 Day-05 集合類型 — Dictionary
Swift4 Day-06 Control Flow ( 1 )
Swift4 Day-07 Control Flow ( 2 )
Swift4 Day-08 Function ( 1 )
Swift4 Day-09 Function ( 2 )

email : albert.Ch1994@gmail.com

Albert

Written by

Albert

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade