Swift:带有异步 Web 任务的活动指示器
Posted
技术标签:
【中文标题】Swift:带有异步 Web 任务的活动指示器【英文标题】:Swift: Activity Indicator with Async Web tasks 【发布时间】:2017-07-19 17:40:42 【问题描述】:晚上我有以下问题:
问题
我的应用是基于网络的应用。它从 API 下载数据,您可以通过不同的tableViews
显示结果。
LandingPage 加载后,应用开始下载数据。数据通过许多异步任务下载。
我希望用户在数据全部下载之前不能使用该应用,并显示activity indicator
。
我想在页面加载后立即显示活动指示器,而不是在调用异步 closure 时停止它。
问题是,就像 5 个异步函数,每个异步任务都让其他异步任务。
那么有没有办法了解是否有异步任务正在运行,如果是:显示指标,如果没有:停止指标?
或者,有更好的设计模式来实现这一点?
【问题讨论】:
研究使用DispatchGroup
。
请参阅***.com/questions/28100847/… 和其他类似问题。使用 Alamofire 是无关紧要的。使用实际异步任务所需的内容。
【参考方案1】:
由于你有很多异步,你应该使用 promise kit:
Promise Kit
有了它,您可以管理所有请求,甚至可以对每个请求执行不同的错误处理,并随时显示或隐藏加载指示符。
【讨论】:
谢谢你的回答。但我不想使用外部库 因此您可以实施“投票”,其中每个任务都有一票,当所有人都投票后,您可以隐藏您的 HUD。【参考方案2】:解决方案
正如@rmaddy 建议的那样,我使用了GroupDispatch
首先,我创建了一个 GroupDispatch 对象。
对于每个异步调用,我将groupDispatch
对象作为parameter
传递,并且在函数内部我使用了group.enter()
,因此每次调用该函数时它都会进入组内。
在闭包中我使用了group.leave()
方法。
最后我使用group.notify
在所有异步调用完成时收到通知。
效果很好!
【讨论】:
以上是关于Swift:带有异步 Web 任务的活动指示器的主要内容,如果未能解决你的问题,请参考以下文章
将“活动指示器”添加到 TableView 并在 Swift 中恢复为“披露指示器”
如何使用 swift 在 WKWebView 的页面中间显示活动指示器?