2017-01-25 7 views
0

ディスパッチコードのセットを順番に実行する方法。たとえば :「何かがない」UIにresutを移入であるため、ディスパッチメインを順番に実行

Dispatch.main.async{ 
//call API, it may takes 5-10 seconds.. 
//do something.. 
    print("done 1") 
} 

Dispatch.main.async{ 
//call API, it may takes 5-10 seconds.. 
//do something 
    print("done 2") 
} 

Dispatch.main.asyncAfter{ 
    print("completed") 
} 

Output: 
completed 
done1 
done2 

Expected output: 
done1 
done2 
completed 

私はメインを使用しています。 グローバル()を使用しようとしましたが、「完了」が常に最初に実行され、APIの呼び出し時間を確認できないため、ディスパッチ時間の遅延を使用するのには適切ではありません。なぜあなたは完了ハンドラを使用していけない

+0

〜迅速に提案がありますか?試してみてください。たくさんの投稿があります。 –

+2

メインキューはシリアルディスパッチキューであるため、3番目のブロックに 'Dispatch.main.async()'を使うこともできますし、dispatch_groupを使うこともできます。 – Paulw11

答えて

0
DispatchQueue.main.async{ 
      //call API, it may takes 5-10 seconds.. 
      //do something.. 
      print("done 1") 
     } 

     DispatchQueue.main.async{ 
      //call API, it may takes 5-10 seconds.. 
      //do something 
      print("done 2") 
     } 

     DispatchQueue.main.asyncAfter(deadline: .now() + 0.1){ 
      print("completed") 
     } 

It will execute in sequence

+0

これは動作しているようですが、 'done 1'と'done 2'は実際に5-10秒かかるので、まだ' completed'を印刷します。 – Russell

+0

はい、このコードを使用しましたが、私の予想されるresult.Ideallyを得ることができませんすべてのメインディスパッチが完了した後。 –

+0

ありがとうございます。あなたは思い出しました。 – Raja

関連する問題