美文网首页
Block开发使用场景(参数,返回值)

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

作者: cjdale | 来源:发表于2018-07-04 16:55 被阅读0次

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

相关文章

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

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

  • Block相关

    Block基本使用 1.1、block声明:返回值(^block变量名)(参数)void(^block)(); 1...

  • iOS -Block的使用场景

    作用 保存一份代码,适当的时候再调用。同一个类型(参数和返回值)的block是可以赋值的。 开发中是使用场景 1,...

  • block初窥

    一.block的简单使用 1.block声明 block变量的声明格式为: 返回值类型 (^block名字)(参数...

  • Block

    block声明 返回值 (^block名称)(参数列表); //参数列表无为void block定义 返回值(可省...

  • Block的三种应用场景

    block开发中使用场景1.把block保存到对象中,恰当的时候才去调用2.把block当做方法的参数使用,外界不...

  • Block开发中使用场景

    block开发中使用场景 1.把block保存到对象中,恰当时机的时候才去调用 2.把block当做方法的参数使用...

  • Block和协议

    1、block 1.1 block的基本定义(无参数无返回值的、有参数无返回值的、有参数有返回值的)1.2 inl...

  • block的使用--返回值

    block常用的场景: 当做属性传值 当做方法的参数回调 当做方法的返回值使用前面2种比较常见,也比较容易使用,第...

  • block常见用法整理(译)

    1.作为本地变量的block: 返回值类型 ^(block名称 (参数类型) = ^返回值类型(参数) {bloc...

网友评论

      本文标题:Block开发使用场景(参数,返回值)

      本文链接:https://www.haomeiwen.com/subject/lizeuftx.html