SWIFT 4. 閉包 Closures
閉包 Closures
- 可視為沒有名字的func
- 可利用上下文來推斷參數型別和回傳型別
- 隱式回傳值
- 簡寫參數名稱
- 跟隨閉包
- 閉包是參考類型 (reference type)
var names = ["Cindy","Andy", "Hellen", "Watson", "Baddy"]
print("1. No sorting : \(names)")
//Define a func for sorting
func forward (s1:String, s2:String) -> Bool {
return s1<s2
}
//Sort array by array.sort with forward func
print("2. Sort array : \(names.sort(forward))")
/*
Closures Expression Syntax
{ (arguments) -> (return type) in
(statements...)
}
*/
var result1 = names.sort(
{
(s1:String, s2:String) -> Bool in
return s1<s2
}
)
//Sort array by array.sort with closures
print("3. With closures : \(result1)")
//簡化closures
var result2 = names.sort({ s1, s2 in return s1<s2})
//Sort array by array.sort with simplex closures
print("3. With simplex closures : \(result2)")
//簡化closures與回傳
var result3 = names.sort({ s1, s2 in s1<s2})
//Sort array by array.sort with simplex closures
print("3. With simplex closures and return type : \(result3)")
//簡寫參數名稱: 不需宣告參數, 回傳型別與回傳項目
var result4 = names.sort({ $0<$1})
//Sort array by array.sort with simplex closures
print("4. 簡寫參數名稱 : \(result4)")
//跟隨閉包 Trailing Closures: 將閉包從括號移到括號後, 以增加可讀性
var result5 = names.sort() { $0<$1}
//Sort array by array.sort with simplex closures
print("5. 跟隨閉包 : \(result5)")
- Felix Lai