閉包簡(jiǎn)介
與OC中的Block類似愕秫,閉包
主要用于異步操作執(zhí)行完成后的代碼回調(diào),網(wǎng)絡(luò)訪問結(jié)果以參數(shù)的形式傳遞給調(diào)用方
- 與OC中的 block 類似
- 也是一個(gè)預(yù)先定義好的
代碼塊
- 在需要的時(shí)候執(zhí)行
- 可以作為函數(shù)的參數(shù)焰络,也可以作為函數(shù)的返回值
- 包含
self
時(shí)也是需要注意循環(huán)引用的問題
定義閉包的幾種形式
- 沒有參數(shù)沒有返回值
//定義
let cloures = {
print("閉包打印")
}
//執(zhí)行
cloures()
- 有參數(shù)沒有返回值
//格式 let 閉包名 = {(參數(shù)列表) in __閉包的執(zhí)行代碼__}
let cloures = {(num1 a:Int, num2 b:Int) in
let result = a + b
print("打印輸出:\(result)")
}
cloures(num1: 10, num2:20)
- 有參數(shù)有返回值
//格式 let 閉包名 = {(參數(shù)列表) -> 返回值類型 in __閉包的執(zhí)行代碼__}
let cloures = {(num1 a: Int, num2 b: Int) -> Int in
let result = a + b
return result
}
let result = cloures(num1: 10, num2: 20)
閉包沒有返回值的三種情況
- 閉包沒有返回值的三種情況和函數(shù)的寫法一樣
// 啥都不寫
let cloures1 = { (num1 a: Int, num2 b: Int) in
let result = a + b
print("打印輸出:\(result)")
}
// -> ()
let cloures2 = { (num1 a: Int, num2 b: Int) -> () in
let result = a + b
print("打印輸出:\(result)")
}
// -> Void
let cloures3 = { (num1 a: Int, num2 b: Int) -> Void in
let result = a + b
print("打印輸出:\(result)")
}