/*
Objective-c - block作为函数的参数
1> block做为一种数据类型,可以做为方法或者函数的参数.
2> 将block做为函数的参数,如同其他数据类型一样,直接将block变量写在函数或者方法的小括弧中即可.
例1:
void test(void(^firstBlock)());
无返回值无参数的block变量做为无返回值的函数的参数.
等价于:
typedef void(^NewType)();
NewType b1;
void test(b1);
3> 带block参数的函数的调用
调用参数是block的函数,需要传入与参数block类型相同的block变量,或者直接传递符合要求的代码.
例1:(传入与参数block类型相同的block变量)
//block变量的声明和初始化
typedef void(^NewType)();
NewType b1 = ^void(){
NSLog(@"大家好!");
};
//函数的声明和实现
void test(b1);
void test(b1)
{
b1();
}
//调用
test(b1);
例2:(直接传递符合要求的代码.)
//函数的声明
void test(void(^firstBlock)());
//函数的实现
void test()
{
}
//调用
test( ^void(){
NSLog(@"大家好!");
};
);
4> block作为函数的参数的运用
基本数据类型做为函数的参数,可以将调用者的数据传递到函数的内部去使用.
block做为函数的参数,可以将调用者的一段代码传递到函数的内部去执行.
一个函数代表一个相对独立的功能,当函数的执行需要一段代码才可以继续执行的时候,调用者可以将需要的代码做为函数的参数传递到函数内部去执行.
如下代码:
*/
#import <Foundation/Foundation.h>
//无参数无返回值的block!
typedef void(^NewType)();
//有返回值有参数的block
typedef int(^NewType2)(int num1, int num2);
//函数test1的声明
void test1(NewType b1);
//函数test2的声明
void test2(NewType2 b2);
int main(int argc, const char * argv[]) {
NewType b1 = ^void(){
NSLog(@"大家好,我是无参数无返回值的block!");
};
//调用函数
test1(b1);
NewType2 b2 = ^int(int num1, int num2){
return num1 + num2;
};
//调用函数
test2(b2);
return 0;
}
//函数test1的实现
void test1(NewType b1)
{
b1();
}
//函数test2的实现
void test2(NewType2 b2)
{
NSLog(@"10 + 20 = %d", b2(10, 20));
}