Swift:Activity 带有异步 Web 任务的指示器

Swift: Activity Indicator with Async Web tasks

晚上我有以下问题:

问题

我的应用程序是一个基于网络的应用程序。它从 API 下载数据,您可以通过不同的 tableViews.

显示结果

加载 LandingPage 后,应用开始下载数据。通过许多异步任务下载数据。

我希望用户不能使用该应用程序,直到数据全部下载完毕,显示activity indicator

我想在页面加载后立即显示 activity 指示器,而不是在调用异步 closure 时停止它。

问题是像 5 个异步函数,每个异步任务都使其他异步任务。

那么有没有办法了解是否有异步任务运行,如果有:显示指标,如果没有:停止指标?

或者,有更好的设计模式来完成这个吗?

因为你有很多异步,你应该使用 promise 工具包:

Promise Kit

有了它,您可以管理所有请求,甚至可以对每个请求执行不同的错误处理,并随时显示或隐藏加载指示器。

解决方案

@rmaddy 建议我使用 GroupDispatch

首先,我创建了一个 GroupDispatch 对象

对于每个异步调用,我都将 groupDispatch 对象作为 parameter 传递,并且在函数内部我使用了 group.enter(),因此每次调用该函数时进入组内。 在闭包中我使用了 group.leave() 方法。

最后,我使用 group.notify 在所有异步调用完成时收到通知。

完美运行!