Block-介绍

  • Block简单介绍
    首先Block是iOS中比较特殊的一种数据类型
    Block是苹果官方比较推荐使用的数据类型,应用也比较广泛
    动画、多线程、集合遍历、网络请求回调

  • Block的作用
    Block用来保存一段代码,可以再恰当的时机取出调用,功能类似于函数和方法

  • Block语法
    Block最常见的形式如下

^(int param){
     NSLog(@"%d",param);
};

上面是它的缩写形式,其完整的形式应该如下

^void(int param){
        NSLog(@"%d",param);
};

而C语言最简单的定义带参函数形式如下

void param(int param){
}

可以看出完整形式的Block语法与一般的C语言函数相比仅有两点不同

  • 没有函数名

  • 带有"^"
    其中没有函数名是因为它是匿名函数,而带有“^”是容易辨识查找

  • 简单使用
    没有参数没有返回值,在没有返回值的时候void也是缺省值

void (^block) = ^{
       NSLog(@"%d",param);
  };

有参数和返回值

int (^block)(int) = ^int(int param){
       NSLog(@"%d",param);
       return param *param;
  };```
提示:当有返回值的时候第三个`int`即'^'后面的返回值类型是可以省略的,但在该block当做参数的时候是不可以省略的。如`-(void)collectionfunDic:(void(^)(NSMutableDictionary *resDic))funDic`
如果没有返回值没有参数Block最简单的

- 使用```typedef```定义```Block```类型
typedef 顾名思义,其作用就是定义一种类型,它可以定义枚举,枚举也是相当于定义了一种新的类型,如下例

typedef enum {
HeoroTypeSuperMan,
HeoroTypeSuperGirl
}HeoroType;

该枚举相当于是定义了一种```HeoroType```的类型。
那么block同时也可以定义一种数据类型,
我们以一个返回两个数值相加的block为例子如下

int (^minusBlock)(int, int) = ^(int num1, int num2) {
return num1 - num2;
};

同时再定义一个返回两个block相乘的block

int (^multiBlock)(int, int) = ^(int num1, int num2) {
return num1 * num2;
};

可以看出上面两个```block```在定义时除了变量名,不同其他都相同,那我们如果在定义相加或相除的```block```,那么他们的格式应该也基本一样,所以,我们完全可以用```typedef```将像这种的```block```定义为一种类型,如上面的```block```,我们可以定义成如下格式

typedef int (^MyBlock)(int, int);

那么上面的相减和相乘block就可以分别定义成

MyBlock minusBlock = ^(int num1, int num2) {
return num1 * num2;
};

MyBlock multiBlock = ^(int num1, int num2) {
return num1 * num2;
};

相对于最上面的定义,这样定义block有以下好处
 - 代码精简,
 - 更加直观

 ```代码精简```不必多说,如我们在定义加、减、乘、除的block,只需用MyBlock的block类型后面加上block的变量名就好。```更加直观```,如上相乘的block,MyBlock就是该block的类型,其定义的block变量需要传入两个int类型的参数,并且返回一个int类型的值。就如同```int result = 5;```myBlock就相当于int,multiBlock就相当于result。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一. block类型的变量的声明. 返回值类型(^block变量名)(参数列表); void (^myBlock)...
    火星救援阅读 456评论 0 0
  • 本文部分内容摘自。 1.Block是啥?凭什么这么屌? 就本质来说,一个Block就是一大堆在接下来某个时间可以被...
    刘大帅阅读 1,732评论 0 31
  • block是语言的的扩展功能,它是一种带有自动变量(局部变量)的匿名函数. /******************...
    long2016阅读 253评论 0 1
  • iOS代码块Block 概述 代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,B...
    smile刺客阅读 2,377评论 2 26
  • Block介绍(一) 一、概述 官方文档这是这样介绍block的 简单的说Block是C语言级别的语法。它对比C,...
    kingandyoga阅读 467评论 0 1