对于IOS中Block得使用方法,以下我对Block的使用进行简单的介绍
1:首先声明一个Block指针
有参有返回值的Block的声明方式如下:
无参和无返回值的
void (^myBlock)(void);
有参有返回值的
int (^myBlock)(int,double);
总结:
返回类型 (^Block名称)(参数类型,...);
2:Block的定义
^(int b){
NSLog("%d",b);
return b;
};
总结:
^(参数类型){
Block主体;
};
Block实体开头是“^”,接着是由小括号所包起来的参数列(比如 int a, int b, int c),行为主体由大括号包起来,专有名字叫做block literal。行为主体可以用return回传值,类型会被compiler自动辨别。如果没有参数列要写成: ^(void)。
具体的使用方法如下:
<span style="white-space:pre"> </span>int (^my)(int,int);
my = ^(int x,int y){
return x+y;
};
NSLog(@"%d",my(5,6));
结果:11
这是代表Block会回传输入值的相加值(int a 就是参数列, return a*a; 就是行为主体)。记得行为主体里最后要加“;”,因为是叙述,而整个{}最后也要加“;”,因为Block是物件实体。
3:单Block代码块的使用方法
double sum = ^(double x,double b){return x+b;}(4,10);
NSLog(@"sum=%lf",sum);
结果:14.000000
例如以上代码:
定义了一个Block代码块,返回值为double,参数为double。最后(4,10)意思是指传一个4和10作为x,b的输入参数的值。
最后结果输出14.000000
如果是无返回值的Block代码块该怎么写?
答:据本人测试并未测试出不使用Block指针的情况下纯Block代码块无返回值现象。故断定(单Block代码块的使用方法)必须有返回值。在第1点中我们也强调了:行为主体可以用return回传值,类型会被compiler自动辨别。所以如果想声明一个无返回类型的Block,还是请使用Block指针先声明好,然后再使用。
附:此点如有错误,请大家指正。感谢不尽!