所有下载完成后停止 activity 指示器

stop activity Indicator once all downloads are completed

好吧,我快要疯了。我是一个 swift 初学者,正在进行相当大的编程操作,而且有点不知所措。也许你可以提供帮助。

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 个其他调用,它们都需要不同的时间来下载。 我正在调用函数在主线程上运行并启动 activity Indicator:

dispatch_async(dispatch_get_main_queue(), {
        self.activityIndicator.startAnimating()
        self.getDataFromDatamanager()
    })

我的问题:如何才能在所有函数下载完毕后才停止 activity 指示器?

引入completedItems:变量。您可以在某些功能的下载完成时增加它。每次完成后都会调用停止 activity 函数,如下所示:-

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()
        })
      }
}