------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
block的typedef
1、block的typedef
可以使用typedef定义一个Block的类型,便于在后续直接使用
格式:
typedef 返回值类型(^block变量名)(参数类型列表);
举例:typedef int(^MyBlock)(int ,int);
代码范例:
<span style="font-size:14px;">typedef double(^MyBlock)(double, double);
MyBlock area = ^(double x, double y){
return x * y;
};
MyBlock sum = ^(double a, double b){
return a + b;
};
NSLog(@"%.2f", area(10.0, 20.0));
NSLog(@"%.2f", sum(10.0, 20.0));</span>
说明:
1)typedef是关键字用于定义类型,MyBlock是定义的Block类型
2)area、sum分别是MyBlock类型的两个Block变量
尽管,typedef可以简化Block的定义,但在实际开发中并不会频繁使用typedef关键字
这是因为Block具有非常强的灵活性,尤其在以参数传递时,使用Block的目的就是为了立即使用
而如果使用typedef,则需要:
1)typedef void(^EnumerateBlock)(id obj, NSUInteger idx, BOOL *stop);
2)- (void)enumerateObjectsUsingBlock:(EnumerateBlock)block;
而最终的结果却是,除了定义类型之外,EnumerateBlock并没有其他用处
<span style="font-size:14px;">#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 定义一个block变量,并且赋值
void (^myBlock)() = ^{
NSLog(@"helloworld");
};
myBlock();
//定义一个别名
// 给 没有返回值 没有参数的block起一个别名
// Block 是一个类型,不在是一个单纯的变量了
typedef void (^Block)();
Block b1;
//block类型的变量
b1 =^{
NSLog(@"helloworld");
};
b1();
//定义有参数\有返回值的 block类型
//定义新的别名
//返回值是int 有两个 int类型的参数
typedef int (^NewType1)(int ,int );
NewType1 nt1 = ^(int a,int b){
return a+b;
};
//连续定义多个 NewType类型的变量
NewType1 n1,n2,n3;
n1 = ^(int x,int y){
return x>y?x:y;
};
int s = nt1(12,23);
NSLog(@"s = %d",s);
}
return 0;
}</span>