循环中的URLSession不起作用

时间:2018-04-27 23:00:48

标签: swift for-loop urlsession

我正在尝试使用URLSession来下载多个JSON文件,并且当我运行该功能时,它会运行一次。但是,当我从循环调用getSMAPrices函数时,它不起作用,我找不到原因。

这是工作下载功能,如果我调用它。

func getSMAPrices(symbol: String) {
    let urlString = "https://www.alphavantage.co/query?function=SMA&symbol=\(symbol)&interval=daily&time_period=9&series_type=close&apikey=KPLI12AW8JDXM77Y"
    guard let url = URL(string: urlString) else {
        return
    }

    dataTask = defaultSession.dataTask(with: url, completionHandler: { (data, response, error) in
        if error != nil {
            print(error!.localizedDescription)
        }

        guard let data = data else {
            return
        }

        //Implement JSON decoding and parsing
        do {
            //Decode retrived data with JSONDecoder and assing type of Article object

            let decoder = JSONDecoder()
            decoder.dateDecodingStrategy = .iso8601
            let stockData = try decoder.decode(SimpelMovingAvarage.self, from: data)

            //Get back to the main queue
            DispatchQueue.main.async {
                print(stockData)
            }

        } catch let jsonError {
            print(jsonError)
        }

        })
    dataTask?.resume()
}

这是我非常简单的循环,它在每个运行周期中替换URL中的一个部分。但没有任何反应。

public func scanSymbols() {
    for symbol in self.symbols {
        progress += 1
        progresBar.maxValue = Double(symbols.count)
        progresBar.doubleValue = progress

        //This does not work
        getSMAPrices(symbol: symbol.key)
    }
}

1 个答案:

答案 0 :(得分:0)

这是因为您的dataTask变量似乎是一个实例属性,并且每次调用此方法时都会被覆盖。