I have a function that is build to get the latest items from a API. There are several other ones, with different functionality, but they all work the same. It looks like this:
func getLatest(pageNumber: Int) -> Array<Any>{
let urlRequest = URL(string: baseUrl + latestUrl + String(pageNumber))
let requestedData = doRequest(url: urlRequest!, completion: { data -> Void in
// We have the data from doRequest stored in data, but now what?!
})
return allData
}
I also have a async method that handles the requests. That one looks like this:
func doRequest(url: URL, completion: @escaping ([[ApiItem]]) -> ()){
var allItems = [[ApiItem]]()
URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let data = data else { return }
do{
let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as! [String: AnyObject]
let results = json["items"] as? [AnyObject]
for r in results!{
let item = ApiItem(json: r as! [String: Any])
allItems.append([item])
}
completion(allItems)
} catch let jsonError{
print("JSON error: \(jsonError)")
}
}.resume()
The doRequest function works absolutely fine. It gets the data, parses the JSON and send it back to getLatest
--> requestedData
. The problem right now is, is that getLatest()
is a function that needs to return the data that is stored in the data
variable of requestedData
.
How can I make it so, that the getLatest()
function returns the data that is stored in the data
in requestedData()
?