好吧,我快要疯了。我是一个快速的初学者,正在进行相当大的编程操作,并且它变得有点难以承受。也许你可以帮忙。
func getDataFromDatamanager() {
DataManager.getGoldPriceFromQuandlWithSuccess { (QuandlGoldPrice) -> Void in
let json = JSON(data: QuandlGoldPrice)
if let datasetMineral = json["dataset"]["dataset_code"].string {
print("NSURLSession: \(datasetMineral)")
}
DataManager.getSilverPriceFromQuandlWithSuccess { (QuandlSilverPrice) -> Void in
let json = JSON(data: QuandlSilverPrice)
if let datasetMineral = json["dataset"]["dataset_code"].string {
print("NSURLSession: \(datasetMineral)")
}
}
此函数中还有大约 15 个其他调用,它们都需要不同的时间来下载。 我正在调用该函数以在主线程上进行操作并启动事件指示器:
dispatch_async(dispatch_get_main_queue(), {
self.activityIndicator.startAnimating()
self.getDataFromDatamanager()
})
我的问题:如何仅在所有功能下载完毕后停止事件指示器?
最佳答案
引入completedItems:变量。当某些功能下载完成时,您可以增加该值。每次完成后调用停止事件函数,如下所示:-
var completedItems:Int = 0
func getDataFromDatamanager() {
DataManager.getGoldPriceFromQuandlWithSuccess { (QuandlGoldPrice) -> Void in
let json = JSON(data: QuandlGoldPrice)
if let datasetMineral = json["dataset"]["dataset_code"].string {
completedItems = completedItems + 1 // completedItems ++
stopActivity()
print("NSURLSession: \(datasetMineral)")
}
DataManager.getSilverPriceFromQuandlWithSuccess { (QuandlSilverPrice) -> Void in
let json = JSON(data: QuandlSilverPrice)
if let datasetMineral = json["dataset"]["dataset_code"].string {
completedItems = completedItems + 1 // completedItems ++
stopActivity()
print("NSURLSession: \(datasetMineral)")
}
}
func stopActivity() {
if completedItems == 15 { // give # of functions
dispatch_sync(dispatch_get_main_queue(), {
self.activityIndicator.stopAnimating()
})
}
}
关于swift - 所有下载完成后停止事件指示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36053011/