2017-07-19 60 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