let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
func backward(_ s1: String, _ s2: String) -> Bool {
return s1 > s2
}
var reversedNames = names.sorted(by: backward)
// reversedNames 為 ["Ewa", "Daniella", "Chris", "Barry", "Alex"]
閉包表達式語法有如下的一般形式:
{ (parameters) -> returnType in
statements
}
閉包表達式參數(shù) 可以是 in-out 參數(shù)清笨,但不能設定默認值檀夹。也可以使用具名的可變參數(shù)张肾。元組也可以作為參數(shù)和返回值速勇。
reversedNames = names.sorted(by: { (s1: String, s2: String) -> Bool in
return s1 > s2
})
單表達式閉包隱式返回
單行表達式閉包可以通過省略 return 關鍵字來隱式返回單行表達式的結(jié)果前痘,如上版本的例子可以改寫為:
reversedNames = names.sorted(by: { s1, s2 in s1 > s2 } )
在這個例子中凛捏,sorted(by:) 方法的參數(shù)類型明確了閉包必須返回一個 Bool 類型值。因為閉包函數(shù)體只包含了一個單一表達式(s1 > s2)芹缔,該表達式返回 Bool 類型值坯癣,因此這里沒有歧義,return 關鍵字可以省略乖菱。
參數(shù)名稱縮寫
Swift 自動為內(nèi)聯(lián)閉包提供了參數(shù)名稱縮寫功能坡锡,你可以直接通過 $0,$1窒所,$2 來順序調(diào)用閉包的參數(shù)鹉勒,以此類推。
如果你在閉包表達式中使用參數(shù)名稱縮寫吵取,你可以在閉包定義中省略參數(shù)列表禽额,并且對應參數(shù)名稱縮寫的類型會通過函數(shù)類型進行推斷。in關鍵字也同樣可以被省略皮官,因為此時閉包表達式完全由閉包函數(shù)體構(gòu)成:
reversedNames = names.sorted(by: { $0 > $1 } )
在這個例子中脯倒,$0和$1表示閉包中第一個和第二個 String 類型的參數(shù)。