Как проанализировать данные и затем загрузить их в pickerView? - PullRequest
0 голосов
/ 26 января 2019

Мне нужно получить данные JSON и поместить их в pickerView на моем ViewController. Проблема в том, что мое приложение вызывает функцию разбора ПОСЛЕ того, как оно проходит через все функции протокола и, следовательно, загружает pickerView без всяких усилий. Каков наилучший способ сначала получить данные, а затем загрузить их в pickerView?

Спасибо!

override func viewDidLoad() {
    super.viewDidLoad()
    getCompanyList()     // This is parse function which loads dictionary companiesListDict



private var companiesListDict: [String: String] = [:]



    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return self.companiesListDict.keys.count
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

    return Array(self.companiesListDict.keys)[row]
}

UPD:

 private func getCompanyList () {
    if let url = URL(string: "https://api.iextrading.com/1.0/stock/market/list/infocus") {
        let dataTask = URLSession.shared.dataTask(with: url) {data, response, error in
            guard
                error == nil,
                (response as? HTTPURLResponse)?.statusCode == 200,
                let data = data
                else {
                    print("‼️ Network error")
                    return
            }

            self.parseCompanyList(data: data)
        }
        dataTask.resume()
    }
}

private func parseCompanyList(data: Data) {
    do {
        let jsonObject = try JSONSerialization.jsonObject(with: data)

        guard
            let companyList = jsonObject as? [Any]
          else {print("‼️ Invalid JSON format"); return}

        for company in companyList {

            guard
            let companyJson = company as? [String: Any],
            let companyName = companyJson["companyName"] as? String,
            let companyLabel = companyJson["symbol"] as? String
                else {print("‼️ Invalid JSON format"); return}

            self.companiesListDict[companyName] = companyLabel
        }

            DispatchQueue.main.async {
                self.companyPickerView.reloadAllComponents()
                self.companyPickerView.isHidden = false

            }

    }

    catch {
        print("JSON parsing error: " + error.localizedDescription)
    }

}
...