Я имею дело с такой проблемой: мне нужно получить данные сервера и привязать его к моему pickerView. Но теперь, при первом запуске, я получаю пустой сборщик, так как функция для извлечения выполняется после viewDidLoad()Как правильно загрузить данные с сервера в фоновом режиме перед запуском
Итак, могу ли я как-то извлечь данные перед viewDidLoad()?
Я попытался использовать DispatchQueue.global (qos: .background) .async для извлечения данных, но похоже, что это сделано ненадлежащим образом.
var currencies = [String]()
override func viewDidLoad() {
super.viewDidLoad()
setDelegates()
setupLabelInPicker()
updatePickerInfoBeforeStart()
}
func updatePickerInfoBeforeStart() {
DispatchQueue.global(qos: .background).async {
self.retrieveCurrency{ [weak self]
currencies in self?.currencies = currencies
}
DispatchQueue.main.async {
self.pickerTo.reloadAllComponents()
}
}
}
Методы извлечения данных:
func retrieveCurrency(completion: @escaping ([String]) -> Void) {
requestCurrencyRates { [unowned self] (data, error) in
if error != nil {
fatalError()
} else {
comletion(self.parseCurrensyResponse(data: data))
}
}
}
Привязка данных к подборщика:
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return currencies[row]
}
Существуют ли существует общий подход для таких задач?
Почему бы не показать какой-то экран загрузки, пока что называется? –