您的位置:首页 > 其它

dispatch_block_t 简单的实现不带参数的回调函数

2016-06-23 12:32 330 查看
通常我写一个不带参数的块回调函数是这样写的

在 . h 头文件中

定义类型

typedef void (^leftBlockAction)();


在定义一个回调函数

-(void)leftButtonAction:(leftBlockAction)leftBlock;


在.m 文件中

-(void)leftButtonAction:(leftBlockAction)leftBlock{

leftBlock();

}


今天学会一个高大上的方法

只要在.h 头文件定义属性方法

@property (nonatomic,copy) dispatch_block_t leftBlockAction;


在.m文件 调用的方法里调用

if (self.leftBlockAction) {

self.leftBlockAction();

}


在另个模块里直接

MyView *alert = [[MyView alloc]init];

alert.leftBlockAction = ^() {

NSLog(@"left button clicked");

};


当然了也可以

@property (nonatomic, copy) void(^signInBlock)(NSString *);


if (self.signInBlock) {
self.signInBlock(@"今天您已经签到了");
}


其他都相同,这样也就简单了不少。

当然也有如下用法

typedef void (^DownloadSuccess) (NSString *downloadURL, NSData *data);
typedef void (^DownloadFailure) (BNetworkError *error, id JSON);
typedef void (^DownloadProgress) (CGFloat progress);


if (success){
dispatch_block_t block = ^{
success(url, data);
};

if ([NSThread isMainThread] == NO) {
dispatch_async(dispatch_get_main_queue(), block);
}else{
block();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: