2017-07-19 59 views
0

晚上,我有以下問題:斯威夫特:活動指示燈與異步網絡任務

的問題

我的應用程序是一個基於web應用程序。它從下載數據API,您可以通過不同的tableViews顯示結果。

當加載LandingPage時,應用程序開始下載數據。數據通過許多異步任務下載。

我想用戶不能使用該應用程序,直到數據全部下載,顯示activity indicator

我正在考慮在頁面加載後立即顯示活動指示符,並在調用異步關閉時停止它。

問題是,像5個異步函數,並且每個異步任務都使其他異步任務。

那麼,有沒有辦法知道,如果有一個異步任務運行,如果是:顯示指標,如果不是:停止指標

或者,有更好的設計模式來實現這一目標?

+1

使用'DispatchGroup'進行調查。 – rmaddy

+0

請參閱https://stackoverflow.com/questions/28100847/checking-for-multiple-asynchronous-responses-from-alamofire-and-swift以及其他類似問題。 Alamofire的使用是無關緊要的。使用您需要的實際異步任務。 – rmaddy

回答

0

解決方案

爲@rmaddy曾建議我用GroupDispatch

首先我已經創建GroupDispatch對象的。

對於每個異步調用,我已通過groupDispatch對象爲parameter,並且在我使用的函數group.enter()中,因此每次調用該函數時都會進入該組。 在關閉期間,我使用了group.leave()方法。

最後我用group.notify在所有的異步調用完成後都會收到通知。

它完美的作品!

0

既然你有很多異步的,你應該使用承諾套件:

Promise Kit

有了這個,你可以管理你的所有要求,甚至執行不同的錯誤處理的每一個和顯示或隱藏裝只要你想要的指標。

+0

謝謝你的回答。但我不想使用外部庫 –

+0

所以你可以實現「投票」,其中每個任務有一票,當所有人都投票時,你可以隱藏你的HUD。 – GIJOW