閉包(即一些小的匿名代碼塊)瓣喊,可以像函數(shù)一樣使用鸽粉。可以很方便的將閉包傳給其他函數(shù)聋呢,告訴它們應(yīng)當(dāng)如何執(zhí)行某一個任務(wù)苗踪。
1.使用sort方法和閉包進(jìn)行數(shù)組排序
sort方法返回一個數(shù)組的有序版本。(sort方法即為Swift2.0之前的sorted方法削锰。而原來的sort方法改名為sortInPlace通铲,用來將原數(shù)組修改成有序版本)
let numbers = [12,25,1,35,27]
let numbersSorted = numbers.sort({ (n1: Int, n2: Int) -> Bool in
//進(jìn)行從小到大的排序
return n2 > n1
})
print(numbersSorted) //[1, 12, 25, 27, 35]
2.閉包可以不用指定參數(shù)類型,編譯器會幫我們推斷的
let numbers = [12,25,1,35,27]
let numbersSorted = numbers.sort({ n1, n2 in
//進(jìn)行從小到大的排序
return n2 > n1
})
print(numbersSorted) //[1, 12, 25, 27, 35]
3.還可以省略參數(shù)名器贩,直接根據(jù)數(shù)字來引用每個參數(shù)($0颅夺,$1,$2......)
let numbers = [12,25,1,35,27]
let numbersSorted = numbers.sort({
//進(jìn)行從小到大的排序
return $1 > $0
})
print(numbersSorted) //[1, 12, 25, 27, 35]
4.如果閉包只包含一行代碼蛹稍,可以省略return關(guān)鍵字
let numbers = [12,25,1,35,27]
let numbersSorted = numbers.sort({
//進(jìn)行從小到大的排序
$1 > $0
})
print(numbersSorted) //[1, 12, 25, 27, 35]
//如果是比較大小還可以進(jìn)一步省略
let numbersSorted2 = numbers.sort(>)
print(numbersSorted2) //[1, 12, 25, 27, 35]
5.如果一個閉包是函數(shù)調(diào)用的最后一個參數(shù)吧黄,可以將它放在括號外面。提高可讀性唆姐。
let numbers = [12,25,1,35,27]
let numbersSorted = numbers.sort(){
//進(jìn)行從小到大的排序
$1 > $0
}
print(numbersSorted) //[1, 12, 25, 27, 35]
6.這個換行也是可選的拗慨,所以代碼可再次精簡
let numbersSorted = numbers.sort(){ $1 > $0 }
7.閉包也可以存儲在變量中,像調(diào)用函數(shù)一樣調(diào)用它們
let comparator = {(a: Int, b: Int) in a < b}
comparator(2,5) //true