函數(shù)+Block封裝用Block作回調的函數(shù)


圖片1.jpg

2016年06月22日星期三


有時候,我們在想封裝一個帶有block回調的函數(shù),比如常用的AFNetworking,或者Alomfire(名字如果錯了,不要在意),就會有個小問題,函數(shù)是不能通過block返回任何參數(shù)的??梢赃@么理解(至少我現(xiàn)在是這么想的):函數(shù),是同步執(zhí)行的,它在執(zhí)行的時候是不會停下來的。block卻不是這樣的,block相當于是異步執(zhí)行,另外開一個線程去搞這個事情。所以,這就有個問題,當你想封裝帶block的函數(shù),并且獲取到他的block內(nèi)的參數(shù),用函數(shù)是沒有辦法的。函數(shù)已經(jīng)執(zhí)行完畢并且被內(nèi)存釋放掉了,你block才把回調傳過來,這么寫,xcode就會提醒你是不行的。

但是,在看同事代碼的時候,我非常驚喜的發(fā)現(xiàn)(MDZZ)可以在函數(shù)后面跟一個或者幾個block,然后在函數(shù)內(nèi)部,給函數(shù)的block賦予內(nèi)部封裝的block的值。 具體的實現(xiàn)可以參考如下:

-(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(@"這里執(zhí)行的是progress 代碼塊");
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        //通過這個方式,來進行封裝block的參數(shù)外傳
        success(responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        failuer(error);
    }];
}

實現(xiàn)的時候就是這個牛??樣

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

完美!

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容