URLSession в цикле не работает - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь загрузить несколько файлов JSON с помощью URLSession, и когда я запускаю функцию один раз, она работает. Но в тот момент, когда я вызываю функцию 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 голосов
/ 28 апреля 2018

Это потому, что ваша dataTask переменная выглядит как свойство экземпляра и перезаписывается при каждом вызове этого метода.

...