一、首先学习block的语法定义
block的格式:^(返回值类型 参数){ 表达式 } 其中,如果没有返回值,则返回值类型和参数可以省略
block的变量格式: 返回值类型(^变量名称)(参数类型,参数类型,…)
其中,如果没有返回值,则返回类型为void,参数可以有多个,如果没有,则写成()
我们可以举个例子来讲
int ( ^ blockName) (int , NSString * )=^( int para1, NSString *para2 ){
return 1;
}
//int ( ^ blockName) (int , NSString * )的意思就是定义了一个名字为blockName的block,它有两个参数,一个int的返回值
上面的例子是有参数的,下面我们举个没有参数的
void ( ^ blockName )( )=^{
NSLog ( @"blockName " );
}
//没有返回值的,返回参数类型必须写成void
二、使用typedef
由于block的声明比较复杂,建议使用typedef来声明block
比如我们声明一个有参数的block
typedef int ( ^ blockName ) ( int ,NSString *)
blockName bckName=^( int para1, NSString * para2){
return 1;
}
声明一个没有参数的block
typdef int ( ^ blockName )( )
blockName bckName=^{
retun 1;
}
三、block作为参数的写法
1、采用C语言的写法
typdef int ( ^ABlock )( )
void cFunc( void(^blockName)( ))或者 void cFunction( ABlock block)
block作为返回值的写法:
int ( ^( fun( ) ) ( int ) {
return ^( int count ){ return count; };
}
或者
ABlock fun( ){
return ^( int count ){ return count; };
}
2、采用OC的写法
-(void)OcFunc:(void(^)( )) blockName otherPara:(ABlock) block{
表达式……
}
property的写法
@property (nonatomic ,copy ) int ( ^ block )( int a) //采用C的写法,不能采用OC的写法
@property (nonatomic ,copy ) ABlock block;
以block作为返回值的写法
-( int ( ^ ) ( int )) blockBack{
return ^( int count){ return count ;};
}
参考文献
http://www.dahuangphone.com/dv_rss.asp?s=xhtml&boardid=8&id=85&page=3