Я создаю приложение, которое извлекает данные из API. Я создал «вызов API» в отдельном классе, чтобы я мог использовать один и тот же вызов несколько раз. Но он не возвращает значение, как я ожидаю.
В ViewController A
let data = JsonData.init()
data.downloadJsonData(urlString: urlString) { (responseArray) in
dataArray.append(responseArray)
print(self.dataArray)
}
Я получаю ошибку в dataArray.append(responseArray)
:
Невозможно преобразовать значение типа '[ResponseData]' в ожидаемый тип аргумента 'ResponseData'
В классе JsonData
class JsonData{
var dataArray:[ResponseData] = []
func downloadJsonData(urlString: String, completed: @escaping (Array<ResponseData>) -> ()){
guard let url = URL(string: urlString) else {return}
URLSession.shared.dataTask(with: url) { (data, response, err) in
guard let data = data else{
return
}
do{
self.dataArray = [try JSONDecoder().decode(ResponseData.self, from: data)]
//Complete task in background
DispatchQueue.main.async {
completed(self.dataArray)
}
}
catch let jsonErr{
print(jsonErr)
}
}.resume()
}
}
Я предполагаю, что проблема в:
DispatchQueue.main.async{
completed(self.dataArray)
}
Поэтому я хотел бы вернуть массив обратно в правильный класс, как только он получит данные из API. Что я мог сделать не так? Любая помощь будет высоко ценится.