前面介紹了Block用于保存代碼,傳值的使用場景,這篇blog介紹Block用作方法參數(shù)以及返回值
1、用作參數(shù)
開發(fā)中我們最常見的block用作方法參數(shù),是我們要執(zhí)行一段動畫時,使用系統(tǒng)的UIView方法執(zhí)行動畫。
[UIView animateWithDuration:.5f animations:^{
NSLog(@"所要做的事");
}];
block用作方法參數(shù),我們什么時候用block作為方法參數(shù)呢?由上面代碼所知,我們只需要把我們所要做的事情寫在block里面,而不需要知道什么時候去做這些事情。
總結(jié)
block用作方法參數(shù)的時機(jī)是:需要做的事情由外部決定,具體什么時候去執(zhí)行由內(nèi)部決定。
假設(shè)有種需求,我們需要封裝一個計算器,提供一個計算方法,具體是執(zhí)行加減乘除我們不知,由外部決定。
代碼如下:
CalcutorManager.h
@interface CalcutorManager : NSObject
@property (nonatomic,assign) NSInteger result;
- (void)calcutor:(NSInteger(^)(NSInteger para))block;
@end
CalcutorManager.m
@implementation CalcutorManager
- (void)calcutor:(NSInteger (^)(NSInteger prar))block {
if (block) {
_result = block(_result);
}
}
@end
ViewController.m
CalcutorManager *mgr = [[CalcutorManager alloc] init];
[mgr calcutor:^NSInteger(NSInteger para) {
return para += 5;
}];
NSLog(@"%ld", mgr.result);
輸出結(jié)果為:5
2、用作返回值
Block用于返回值,最經(jīng)典的就是Masonry,SDAutoLayout等。
make.center.mas_equalTo(superView);
鏈?zhǔn)骄幊趟枷?,所有的語句用.連接起來,可讀性很好。
我們平時寫一個方法,然后去調(diào)用,大部分都是用中括號來調(diào)用。比如有如下方法:
- (void(^)(void))test {
return ^{
};
}
//調(diào)用
void(^block)(void) = [self test];
//也可以這樣
self.test();
給上面的需求類CalcutorManager 增加一個實例方法
- (CalcutorManager *(^)(int))add;
- (CalcutorManager *(^)(int))add {
return ^(int value){
self.result += value;
return self;
};
}
在外部調(diào)用
mgr.add(5).add(5);
NSLog(@"%ld", mgr.result);
輸入結(jié)果為: 10