Swift. После прохождения блока do catch обнуляется значение переменной
Имеем такое - разбираю работу с API. Получаем данные, а потом парсим json. но вот после окончания блока DO CATCH пропадают данные из переменной
import Foundation
import UIKit
struct ImageJson:Codable{
let id:String
let author:String
let width:Int
let height: Int
let url:String
let download_url:String
}
class APiHelper{
var images:[ImageJson] = []
func getImageArray(){
let apiString = "https://picsum.photos/v2/list"
guard let apiURL = URL(string: apiString) else {
fatalError("fatal Error")
}
let session = URLSession(configuration: .default)
let task = session.dataTask(with: apiURL) { data, response, error in
guard let data = data else {
return
}
do{
self.images = try JSONDecoder().decode([ImageJson].self, from: data)
//вот здесь в переменной есть данные - массив
print(self.images)
} catch{
print("Произошла ошибка")
print(error)
}
}
task.resume()
//а вот здесь уже нет
//и соответсвенно не сохраняется в self.images
print(self.images)
}
}
Подскажите более опытные в чем дело и что я делаю не так
Ответы (1 шт):
Автор решения: schmidt9
→ Ссылка
Вот пример с вашим кодом, аналогичный примеру в другом моем ответе
class APiHelper{
class func getImageArray(_ completion: @escaping ([ImageJson]) -> Void){
let apiString = "https://picsum.photos/v2/list"
guard let apiURL = URL(string: apiString) else {
fatalError("fatal Error")
}
let session = URLSession(configuration: .default)
let task = session.dataTask(with: apiURL) { data, response, error in
guard let data = data else {
return
}
do{
let images = try JSONDecoder().decode([ImageJson].self, from: data)
DispatchQueue.main.async {
completion(images)
}
} catch{
print("Произошла ошибка")
print(error)
}
}
task.resume()
}
}
APiHelper.getImageArray { images in
print(images)
}