Swift - 閉包

weixin_34320159發表於2016-05-15
閉包的本質是一個函式
閉包 與 OC中的Block相似
來看這樣一段程式碼
var arr:[Int] = []
for _ in 0..<100{
    arr.append(random()%1000)
}

func biggerNumberFirst(a:Int , _ b:Int) -> Bool{
    return a > b
}

arr.sort(biggerNumberFirst)
使用閉包
arr.sort({
    (a:Int ,  b:Int) -> Bool in
    return a > b
})
閉包的化簡
並不一定非要去使用最簡單的寫法,有時候會失去程式的可讀性,我們要在程式碼的簡潔性和易讀性找到一個平衡點
1.複雜的閉包最好還是清楚的寫出變數名 和返回值型別
arr.sort({(a:Int , b:Int) -> Bool in return a > b})
2.簡單的閉包就使用此種
arr.sort({ a , b in return a > b})
3
arr.sort({ a , b in a > b})
4 如果沒有給變數命名 swift自動命名變數名 $0 $1 $2....型別肯定是Int(因為sort函式的引數是Int型別)返回值一定是Bool型
arr.sort({ $0 > $1})
5 >(大於號) 本身就是一個函式
arr.sort(>)
結尾閉包
如果函式是作為最後一個引數,那麼就可以使用結尾閉包
arr.sort(){(a:Int , b:Int) -> Bool in return a > b}
一般這樣寫易讀性較強
arr.sort(){(a:Int , b:Int) -> Bool in
    return a > b
}

相關文章