tags: OC 30 day
有哪些是数据类型?
int,double,float,char ...
既然是一个数据类型那么就可以声明这个数据类型的变量。所以block完全也可以声明一个block类型的变量。
不同类型的变量中可以储存不同类型的数据。
Block 是数据类型
那么block类型的变量中可以储存什么样的数据呢?
block 是一个数据类型,所以我们可以声明一个block类型的变量。block 类型的变量中专们储存一段代码,这段代码可以有参数也可以有反回值。block 变量的声明
虽然block变量中是用来储存一段代码,但是一个block变量中并不是任意一段代码都可以存进去的是有限定的。也就是说,再声明block变量储存的代码段是否有参数,是否有反回值。一但指定以后,这个block变量中就只能储存这样的代码了。声明一个block变量,反回值是void,参数是一个int类型的。
这个时候,这个block变量中就只能储存无反回值并且有一个int参数的代码>段。
声明block变量的语法格式:
反回值类型 (^block变量的名称)(参数列表);void (^myBlock1)(); //表示声明了一个block类型的变量叫做myBlock1// 这个变量只能储存没有反回值没有参数的代码段。
注意:
声明block变量的时候要指定这个block变量可以储存的代码段的反回值和参数描述,一但指定,这个block变量就只能储存这样的代码段了,其他格式的代码段无法储存。
初始化block变量
原理: 写一段符合block要求的代码段,储存到变量就可以了。代码段的书写格式:^反回值类型(参数列表){代码段;};
写一段无参数无反回值的代码段:^void(){NSLog(@"喵呜");};
这个时候,我们就可以将这段代码使用赋值符号储存到无反回值无参数要求的block变量中,当然也可以再声明block变量同时使用符合要求的代码段初始化。
void (^myBlock1)(); myBlock1 = ^void(){NSLog(@"喵呜");};
有返回值的代码段
^int(){ int num1 = 10 + 20; return num1;};
我们就可以将这段代码复职给符合要求的block变量。
int (^myblock2)() = ^int(){ int num1 = 10 + 20; return num1;};
有参数有返回值的代码段
^int(^myblock3)(int num1,int num2){int num3 = num1 + num2;return num3;};
所以我们可以将这段代码赋值给符合要求的block变量。
^int(^myblock3)(int num1,int num2) = ^int(int num1,int num2){int num3 = num1 + num2;return num3;};
注意
赋值给block变量的代码必须要符合block变量的要求。否则会报错。
如何执行储存在block变量中的代码段?
语法格式:
block变量名();
有参数就传参数,有反回值就接。