SWIFT 4. 閉包 Closures

SWIFT 4. 閉包 Closures

閉包 Closures

  • 可視為沒有名字的func
  • 可利用上下文來推斷參數型別和回傳型別
  • 隱式回傳值
  • 簡寫參數名稱
  • 跟隨閉包
  • 閉包是參考類型 (reference type)
 //Describe an array without sorting

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