如何在Objective-C中声明一个Block?
接下来正文中出现词语定义:
returnType:
返回类型, NSInteger、BOOL、int、...
blockName:
block名称,自己定义
parameterTypes:
参数类型 ,NSInteger、BOOL、int、...
parameters :
参数类型 +名 称 ,NSInteger index, BOOL flag ...
someObject :
对象,实例对象 、类对象、self、...
-
局部变量
returnType
(^blockName
)(parameterTypes
) = ^returnType
(parameters
) {...
};
NSInteger (^myblock)(BOOL) = ^NSInteger(BOOL flag) {
//code
if(flag) return 1
return 0;
};
-
属性
@property (nonatomic, copy) returnType
(^blockName
)(parameters
);
@property (nonatomic, copy) NSInteger (^myblock)(BOOL flag);
-
方法参数
-(void)someMethodWithBlock:(returnType
(^)(parameters
))blockName
;
- (void)someMethodWithBlock:(NSInteger(^)(BOOL flag))myblock
{
//code
NSInteger index = myblock(YES);
//处理返回值 index
}
-
方法调用的参数
[someObject
someMethodWithBlock:^returnType
(parameters
) {...
}];
[self someMethodWithBlock:^NSInteger(BOOL flag) {
///code
if (flag) return 1;
return 0;
}];
-
C函数的参数:
void
SomeFunctionWithBlock(returnType
(^blockName
)(parameterTypes
));void someMethodWichBlock(NSInteger(^myblock)(BOOL)){ //code NSInteger index = myblock(YES); //处理返回值 index };
-
typedef:
typedef returnType
(^blockName
)(parameters
);
blockName
aBlock = ^returnType
(parameters
) {...
};
typedef NSInteger (Myblock)(BOOL flag);
//调用
Myblock block = ^NSInteger(BOOL flag){
//code
if(flag)return 1;
return 0;
};