函数+Block封装用Block作回调的函数


图片1.jpg

2016年06月22日星期三


有时候,我们在想封装一个带有block回调的函数,比如常用的AFNetworking,或者Alomfire(名字如果错了,不要在意),就会有个小问题,函数是不能通过block返回任何参数的。可以这么理解(至少我现在是这么想的):函数,是同步执行的,它在执行的时候是不会停下来的。block却不是这样的,block相当于是异步执行,另外开一个线程去搞这个事情。所以,这就有个问题,当你想封装带block的函数,并且获取到他的block内的参数,用函数是没有办法的。函数已经执行完毕并且被内存释放掉了,你block才把回调传过来,这么写,xcode就会提醒你是不行的。

但是,在看同事代码的时候,我非常惊喜的发现(MDZZ)可以在函数后面跟一个或者几个block,然后在函数内部,给函数的block赋予内部封装的block的值。 具体的实现可以参考如下:

-(void)MMhttpService:(NSString *)url parame:(NSDictionary *)parame success:(void (^)(id))success fail:(void (^)(id))failuer{
    AFHTTPSessionManager *manage = [AFHTTPSessionManager manager];
    manage.requestSerializer.timeoutInterval = 10.0f;//设置10秒后就爆炸
    [manage POST:url parameters:parame progress:^(NSProgress * _Nonnull uploadProgress) {
        //tudo
        NSLog(@"这里执行的是progress 代码块");
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        //通过这个方式,来进行封装block的参数外传
        success(responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        failuer(error);
    }];
}

实现的时候就是这个牛🐂样

MM_NetWorking *mm = [[MM_NetWorking alloc]init];
    [mm MMhttpService:@"url" parame:@{} success:^(id response) {
        NSLog(@"这是成功的咯%@",response);
    } fail:^(id error) {
        NSLog(@"这是失败的咯%@",error);
    }];

完美!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容