import Cocoa
/*//閉包表達式語法
{ (parameters) -> returnTyoe in
statements
}
*/
//原始版本
func backwards(s1: String, s2: String) -> Bool {
return s1 > s2
}
let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
var reversed = names.sort(backwards)
//閉包表達式寫法
var newReversed = names.sort({ (s1: String, s2: String) -> Bool in return s1 > s2 })
newReversed
//上下文推斷類型簡寫
var contextReversed = names.sort( { s1, s2 in return s1 > s2 })
contextReversed
//單表達式閉包隱式返回
var singleExpressionRevered = names.sort( { s1, s2 in s1 > s2 })
singleExpressionRevered
//參數(shù)名稱縮寫:Swift 自動為內(nèi)聯(lián)函數(shù)提供了參數(shù)名稱縮寫功能,您可以直接通過$0,$1,$2來順序調(diào)用閉包的參數(shù)独郎。如果您在閉包表達式中使用參數(shù)名稱縮寫氓癌,您可以在閉包參數(shù)列表中省略對其的定義贪婉,并且對應參數(shù)名稱縮寫的類型會通過函數(shù)類型進行推斷疲迂。 in關(guān)鍵字也同樣可以被省略
var shorthandArgumentNames = names.sort( { $0 > $1 })
//如果函數(shù)只需要閉包表達式一個參數(shù)鬼譬,當您使用尾隨閉包時优质,您甚至可以把()省略掉巩螃。
var oneParam = names.sort(){ $0 > $1 }
shorthandArgumentNames
//運算符函數(shù): Swift 的String類型定義了關(guān)于大于號 (>) 的字符串實現(xiàn)避乏,其作為一個函數(shù)接受兩個String類型的參數(shù)并返回Bool類型的值甘桑。 而這正好與sort(_:)方法的第二個參數(shù)需要的函數(shù)類型相符合。 因此咆耿,您可以簡單地傳遞一個大于號萨螺,Swift可以自動推斷出您想使用大于號的字符串函數(shù)實現(xiàn):
var operatorFunctions = names.sort(>)
//尾隨閉包:如果您需要將一個很長的閉包表達式作為最后一個參數(shù)傳遞給函數(shù)慰技,可以使用尾隨閉包來增強函數(shù)的可讀性吻商。 尾隨閉包是一個書寫在函數(shù)括號之后的閉包表達式艾帐,函數(shù)支持將其作為最后一個參數(shù)調(diào)用掩蛤。
func someFunctionThat(closure: () -> Void) {
}
//不使用尾隨閉包進行調(diào)用
someFunctionThat ({
})