Block開發(fā)使用場景(參數(shù),返回值)

前面介紹了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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容