從函數(shù)到閉包
首先來定義一個簡單的函數(shù)
image.png
這里用一個常量來指向函數(shù)纵散,閉包其實就是一個變量或者常量來指向閉包(block)
閉包的語法格式
形參,返回值你虹,代碼都包含在{ }中
形參不能包含外部參數(shù)抄邀。in關(guān)鍵字分隔函數(shù)定義與實現(xiàn)代碼
代碼一:
//定義無參數(shù)喂击,無返回值的閉包,都省略锌雀,只有代碼實現(xiàn)
var block1 = {
print("hhh")
}
//執(zhí)行閉包
block1()
代碼2:
//定義有參數(shù)蚂夕,有返回值的閉包
let block2 = { (x:Int,y:Int) ->Int in
return x + y
}
//執(zhí)行閉包
block2(11,22)
尾隨閉包
閉包作為函數(shù)的最后一個參數(shù),函數(shù)的括號可以提前關(guān)閉腋逆,最后是一個閉包{ }
image.png
閉包回調(diào)
常用于異步回調(diào)婿牍,代替block回調(diào)
無參數(shù)無返回值回調(diào):
func block3(finish:()->()){
print("異步執(zhí)行的代碼")
finish();
}
block3 {
print("over")
}
有參數(shù)回調(diào):
image.png
閉包的參數(shù)和返回值
1,當(dāng)閉包作為函數(shù)的參數(shù)時惩歉,如果閉包有參數(shù)等脂,那么就是要通過函數(shù)調(diào)用來閉包來將函數(shù)內(nèi)的值傳遞給閉包的代碼執(zhí)行(常用于函數(shù)的回調(diào))
2,當(dāng)閉包作為函數(shù)的參數(shù)時撑蚌,如果閉包有返回值上遥,那么就是要通過執(zhí)行閉包,來將閉包的返回值來作為函數(shù)的參數(shù)(常用于函數(shù)的該參數(shù)需要計算才能得到的情況)