/*
Objective-c - block
1> block类型的变量的声明:
block:是一种数据类型,如同其他数据类型一样,我们可以声明一个block类型的变量用来存储数据.
block类型的变量是专门用来存储一段代码的,这段代码可以有参数也可以有返回值.
在声明block类型的变量的时候,必须指定这个block变量中可以存储的代码的参数和返回值描述,并且这个block变量中只能存储符合描述的代码,其他代码是无法存储的.
2> block变量声明的语法:
返回值类型 (^block变量名称)(参数列表)
例1:
void(^firstBlock)();
即:声明了一个名称叫做firstBlock的block类型的变量,并且这个变量中只能存储没有参数,没有返回值的一段代码.
例2:
int(^firstBlock)(int num1, int num2);
即:声明了一个名称叫做firstBlock的block类型的变量,并且这个变量中只能存储返回值为int类型且有两个int类型的参数的一段代码.
一个block变量中只能存储和这个block变量要求相同的一段代码.
3> block变量的初始化
原理:
写一段符合声明的block变量要求的代码,将这段代码存储到这个block变量中.
语法格式:
^返回值类型(参数列表)
{
代码;
};
例1:
//声明一个block变量
void(^firstBlock)();
//初始化
firstBlock = ^void()
{
NSLog(@"大家好!");
};
//代表名字叫firstBlock的变量中存储了一段代码.
例2:
//声明一个block变量
int(^firstBlock)(int num1, int num2);
//初始化
firstBlock = ^int(int num1, int num2)
{
int sum = num1 + num2;
return sum;
};
//代表名字叫firstBlock的变量中存储了一段代码.
4> block代码块的调用执行
语法格式:
变量名();
注:有参数就传参数,有返回值就接收.
如下代码:
*/
#import <Foundation/Foundation.h>
int main(int argc,const char * argv[]) {
//声明一个无参数无返回值的block类型的变量并初始化
void(^firstBlock)() = ^void(){
NSLog(@"大家好!");
};
//声明一个有参数有返回值的block类型的变量并初始化
int(^sumBlock)(int num1,int num2) = ^int(int num1,int num2){
int sum = num1 + num2;
return sum;
};
//调用
firstBlock();
NSLog(@"10 + 20 = %d", sumBlock(10,20));
return 0;
}