Я пытаюсь быстро вернуть массив из вызова API Rest
Я получаю обратно данные, но не могу вывести их из области видимости. Проблема как-то связана с asyn c
Когда я перехожу к классу ApiProduct и к методу getProduct; внутри для l oop он работает, и я вижу результаты, но он не вернет массив, который я создаю.
внизу есть переменная с вызовом thisIsTheArrayIWantPopulatedButIsEmpty, и это массив, который я хочу заполнить , но оказывается пустым
Ниже моя площадка
import UIKit
struct APIResponse: Decodable {
let results: Products
let status: String
}
struct Products: Decodable {
let results: [Product]
}
struct Product: Decodable {
let id: Int64
let title: String
let handle: String
let url: String
}
struct TheProducts {
let results: [TheProduct]
}
struct TheProduct {
let id: Int64
let title: String
let handle: String
let url: String
}
class ApiCall {
let resourceURL: URL
init(){
let resourceString = "https://api.xxxxxxxxx.info/v1/Product/GetAllProductsForKeyboard"
guard let resourceURL = URL(string: resourceString) else {fatalError()}
self.resourceURL = resourceURL
}
func getApiData(completion: @escaping (Products?, Error?) -> ()) {
URLSession.shared.dataTask(with: resourceURL) { data, resp, err in
DispatchQueue.main.async {
if let err = err {
completion(nil, err)
return
}
//successful
do {
let products = try JSONDecoder().decode(Products.self, from: data!)
completion(products, nil)
}
catch {
completion(nil, err)
}
}
}.resume()
}
}
class ApiProduct {
let apiCall = ApiCall()
func getProduct() -> [TheProduct] {
var list: [TheProduct] = []
apiCall.getApiData { (products, err) in
if let err = err {
print("Failed to fetch products", err)
return
}
products?.results.forEach({ (product) in
let pro = TheProduct(id: product.id, title: product.title, handle: product.handle, url: product.url)
list.append(pro)
})
}
return list
}
}
var api = ApiProduct()
var thisIsTheArrayIWantPopulatedButIsEmpty = api.getProduct()