1.閉包定義
swift語言中可以使用一塊獨立的代碼塊替代函數的定義稱獨立的代碼塊為閉包
//閉包的格式:
func sumAAndB(a: Int,b: Int) ->Int {
return a + b
}
print(sumAAndB(10, b: 20))
//<1>使用閉包實現兩個數的和
var sum: (Int,Int)->Int = {(a: Int,b: Int)->Intin
return a + b
}
//[注意]閉包不調用和沒有定義是一樣的里面的語句塊永遠不會執行
2.閉包的簡化(closure)
//<1>當執行語句只有一個表達式的時候 return關鍵字可以缺省
var closure1 = {(a: Int,b: Int) -> Intin
a > b ? a : b
}
print(closure1(10,20))
sortArr(&array123, method: {(a: Int,b: Int)->Boolin
a > b
})
print(array123)
//<2>當執行語句只有一個表達式而且表達式的結果類型可以推斷出來那么return關鍵字和返回值類型可以同時缺省
var closure2 = {(a: Int,b: Int) in
a > b ? a : b
}
print(closure2(100,10000))
sortArr(&array123, method: {(a: Int,b: Int) in
a < b })
print(array123)
//<3>當參數的類型已知并且滿足上面<2>的條件參數的名稱可以缺省參數的類型可以缺省返回值類型可以缺省 return關鍵字可以缺省 in也缺省
var closure3: (Int,Int)->Int = {$0 > $1 ? $0 : $1}
print(closure3(-100,0))
sortArr(&array123, method: {$0 > $1})
print(array123)
//<4>當參數個數為兩個并且滿足<3>的條件閉包中直接添加運算符號就可以
sortArr(&array123, method: <)
print(array123)
3.尾隨閉包
//當函數最后一個形參是函數類型的變量時對函數類型的變量賦值時需要使用閉包那么閉包傳值的書寫位置可以放在所有參數列表之外不放在參數列表的最后位置 我們稱這種寫法為尾隨閉包
//定義函數實現兩個數的和和差
func SumAndSub(a: Int,b: Int,method: (Int,Int)->Int) {
print(method(a,b))
}
SumAndSub(10, b: 20, method: {(a: Int,b: Int)->Intin
return a + b
})
SumAndSub(100, b: 200, method: -)
SumAndSub(0, b: 10){$0 - $1}