iOS 使用局部block處理接口依次調(diào)用需求

開發(fā)中接口偶爾也會遇到接口數(shù)據(jù)依賴的問題,比如接口二需要接口一返回的某個回參作為入?yún)⒉拍苷埱?,這時就需要等接口一請求完成在去調(diào)用接口二。一般都是使用信號量、GCD等。

遇到這種問題博主一般都是使用信號量。如下發(fā)

__block dispatch_group_t group = dispatch_group_create();
dispatch_group_enter(group);
NSDictionary *arguments = @{@"type":@(1)};
[Network JSON_POST:arguments view:self.view prefix:@"" funItem:@"" success:^(NSDictionary * _Nonnull response){
    dispatch_group_leave(group);
} error:^(NSDictionary * _Nonnull response) {
} failure:^{
}];
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
    
});

或者使用下面的嵌套地獄,優(yōu)點(diǎn)是很直觀的解決了問題,缺點(diǎn)是如果只有兩層嵌套還好,當(dāng)多的時候能讓人看的頭皮發(fā)麻,后期維護(hù)麻煩還容易被噴。

//接口一
[Network requestData:^{
   //接口二
   [Network requestData2:^{
   } error:^{
       !error ?: error();
   }];
} error:^{
   !error ?: error();
}];

然后想到了局部的block,block是可以寫在方法內(nèi)的,同時block看著更直白,方便。

- (void)viewDidLoad {
    [super viewDidLoad];
    void (^requestData3)(NSString *value) = ^(NSString *value){
       // 接口3
       [Network request:@{@"data3":value} success::^{
           //三個接口依次請求完成
           success();
       } failure:^{
           failure();
       }];
    };


    void (^requestData2)(NSString *value) = ^(NSString *value){
       // 接口2
       [Network request:@{@"data2":value} success::^{
           // 所有接口請求成功
           requestData3(@"調(diào)用data3");
       } failure:^{
           failure();
       }];
    };
    [Network request:@{@"data1":@"a"} success:^{
       // 接口1
      requestData2(@"調(diào)用data2");

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

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

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