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)
}
→ Ссылка