Block开发使用场景(参数,返回值)

2018-07-04  本文已影响0人  cjdale

前面介绍了Block用于保存代码,传值的使用场景,这篇blog介绍Block用作方法参数以及返回值

1、用作参数

开发中我们最常见的block用作方法参数,是我们要执行一段动画时,使用系统的UIView方法执行动画。

[UIView animateWithDuration:.5f animations:^{
     NSLog(@"所要做的事");
}];

block用作方法参数,我们什么时候用block作为方法参数呢?由上面代码所知,我们只需要把我们所要做的事情写在block里面,而不需要知道什么时候去做这些事情。

总结

block用作方法参数的时机是:需要做的事情由外部决定,具体什么时候去执行由内部决定。

假设有种需求,我们需要封装一个计算器,提供一个计算方法,具体是执行加减乘除我们不知,由外部决定。
代码如下:
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);

输出结果为:5

2、用作返回值

Block用于返回值,最经典的就是Masonry,SDAutoLayout等。

make.center.mas_equalTo(superView);

链式编程思想,所有的语句用.连接起来,可读性很好。

我们平时写一个方法,然后去调用,大部分都是用中括号来调用。比如有如下方法:

- (void(^)(void))test {
     return ^{
    
  };
}
//调用
void(^block)(void) = [self test];

//也可以这样
self.test();

给上面的需求类CalcutorManager 增加一个实例方法

- (CalcutorManager *(^)(int))add;


- (CalcutorManager *(^)(int))add {
      return ^(int value){
        self.result += value;
        return self;
   };
}

在外部调用

mgr.add(5).add(5);
NSLog(@"%ld", mgr.result);

输入结果为: 10

上一篇下一篇

猜你喜欢

热点阅读