對於兩個非同步任務結束後回撥的解決方案
阿新 • • 發佈:2019-02-16
引入ReactiveCocoa,cocoaPods上有ReactiveCocoa這個類。這裡pod的安裝和install就不多說了。注意的是,如果install一直在等待,那就是被牆了,使用pod install --verbose --no-repo-update這條命令。
RACSignal *signal1 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { dispatch_async(dispatch_get_global_queue(0, 0), ^{ [NSThread sleepForTimeInterval:2]; NSLog(@"1"); [subscriber sendNext:@"1"]; [subscriber sendCompleted]; }); return nil; }]; RACSignal *signal2 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { dispatch_async(dispatch_get_global_queue(0, 0), ^{ [NSThread sleepForTimeInterval:3]; NSLog(@"2"); [subscriber sendNext:@"2"]; [subscriber sendCompleted]; }); return nil; }]; [[signal1 zipWith:signal2] subscribeNext:^(id x) { NSLog(@"3"); }];
首先建立兩個訊號。這裡推薦在非同步任務方法中新增一個block,在block回撥中作
[subscriber sendNext:@"1"];
[subscriber sendCompleted];
傳送next訊息,這裡可以為nil;注意這兩條必須寫,不寫的話下面的繫結就沒有意義。
ZipWith繫結兩個任務。回撥中執行兩個非同步任務完成後的動作。對於多個任務的繫結樓主還是研究。。。