閉包能夠?qū)⑤^為復(fù)雜的功能,傳遞是這個閉包中的函數(shù)以及數(shù)據(jù)炕贵,占用資源比較小。
閉包是封閉的野崇、自包含的代碼塊称开。 屬于函數(shù)的匿名簡化版,以下是一個閉包的形式:
{ (形參列表) -> 返回值類型 in
執(zhí)行體(相當(dāng)于函數(shù)體)
}
閉包表達式與與定義函數(shù)的語法相比乓梨,有以下區(qū)別:
- 刪除掉了 func
- 刪除掉了函數(shù)名
- 在返回值的類型后添加關(guān)鍵字in
- { }移到了形參列表的前邊
關(guān)于閉包表達式說明
- 不能以一個閉包表達式開始一個頂層語句
- 形參列表中的形參不能有默認(rèn)值
閉包與普通函數(shù):
1.變量或者常量的值
// 普通函數(shù)
func addShow(int1 :Int, int2: Int) {
return int1 + int2
}
// 閉包
let a = {(int1: Int, int2: Int) -> Int in
return int1 + int2
}
2.函數(shù)返回值
// 普通函數(shù)
func operaShow(flag: Bool) -> (int1: Int鳖轰,int2: Int) -> Int {
func a(int1: Int, int2: Int){
return int1 + int2
}
func b(int1: Int, int2: Int){
return int1 - int2
}
return flag ? a:b
}
// 閉包
func operaShow(flag: Bool) -> (int1: Int,int2: Int) -> Int {
func flag?{(int1: Int, int2: Int) -> Int in
return int1 + int2
}:{(int1: Int, int2: Int) -> Int in
return int1 - int2
{
}
operaShow(flag:true)(5,4)
operaShow(flag:false)(5,4)