閉包的介紹
-
閉包和OC中的block非常相似
- OC中的block是匿名的函數(shù)
- Swift中的閉包是一個特殊的函數(shù)
- block和閉包都經(jīng)常用于回調(diào)
注意:閉包和block一樣,第一次使用時可能不習慣它的語法,可以先按照使用簡單的閉包,隨著學習的深入,慢慢掌握其靈活的運用方法.
閉包的使用
block的用法回顧
- 定義網(wǎng)絡請求的類
@interface HttpTool : NSObject
- (void)loadRequest:(void (^)())callBackBlock;
@end
@implementation HttpTool
- (void)loadRequest:(void (^)())callBackBlock
{
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSLog(@"加載網(wǎng)絡數(shù)據(jù):%@", [NSThread currentThread]);
dispatch_async(dispatch_get_main_queue(), ^{
callBackBlock();
});
});
}
@end
- 進行網(wǎng)絡請求,請求到數(shù)據(jù)后利用block進行回調(diào)
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self.httpTool loadRequest:^{
NSLog(@"主線程中,將數(shù)據(jù)回調(diào).%@", [NSThread currentThread]);
}];
}
- block寫法總結:
// 類型:
返回值(^block的名稱)(block的參數(shù))
// 值:
^(參數(shù)列表) {
// 執(zhí)行的代碼
};
使用閉包代替block
- 定義網(wǎng)絡請求的類
class HttpTool: NSObject {
func loadRequest(callBack : @escaping ()-> ()) {
DispatchQueue.global().async { () -> Void in
print("加載數(shù)據(jù)", Thread.current)
DispatchQueue.main.async { () -> Void in
callBack()
}
}
}
}
- 系列文章
01 Swift最基本的語法變化
02 Swift中的變量和常量
03 Swift中的數(shù)據(jù)類型
04 Swift邏輯分支
05 Swift中的循環(huán)
06 Switf中的字符串
07 Swift 數(shù)組
08 Swift字典
09 Swift 元組
10 Swift 可選類型
11 Swift 類型轉化
12 Swift 函數(shù)
13 Swift 枚舉類型
14 Swift 結構體
15 Swift 類的定義
16 Swift 類的構造函數(shù)
17 Swift 類的析構函數(shù)
18 自動引用計數(shù)
19 Swift 可選鏈
20 協(xié)議
21 閉包
22 Swift 懶加載
23 Swift 注釋