下面的代碼是把數(shù)組里面的名字按字母的順序排序,看上去比較復雜。盡最大的可能簡化閉包里的代碼。
let animals = ["fish", "cat", "chicken", "dog"]
let sortedAnimals = animals.sorted { (one: String, two: String) -> Bool in
return one < two
}
print(sortedAnimals)
第一個簡化的是參數(shù)。系統(tǒng)的參數(shù)類型推斷功能,可以計算出閉包里面參數(shù)的類型,所以你不必定義參數(shù)的類型:
let animals = ["fish", "cat", "chicken", "dog"]
let sortedAnimals = animals.sorted { (one, two) -> Bool in
return one < two
}
print(sortedAnimals)
函數(shù)返回值也可以被推斷出來,所以簡化掉,代碼變?yōu)椋?/p>
let animals = ["fish", "cat", "chicken", "dog"]
let sortedAnimals = animals.sorted { (one, two) in
return one < two
}
print(sortedAnimals)
這個$i 符號可以代替參數(shù)名字,代碼進一步簡化為:
let animals = ["fish", "cat", "chicken", "dog"]
let sortedAnimals = animals.sorted {
return $0 < $1
}
print(sortedAnimals)
在一個獨立的閉包內(nèi),return這個關鍵字是可以省略的。最后聲明的返回值就是閉包的返回值
let sortedAnimals = animals.sort { $0 < $1 }
這簡化很多了,但是我們不能止步于此!
對于字符串,有一個定義如下的比較函數(shù)
func Bool
這個簡單的小函數(shù)可以使你的代碼簡潔如下:
let sortedAnimals = animals.sorted(by:<)