Возврат данных из URLSession в Swift - PullRequest
0 голосов
/ 09 апреля 2020

Я пытался исследовать эту проблему и не могу найти подходящее решение. Я приложил изображение кода. Я пытаюсь вернуть массив подписок, который объявлен перед URLSession, и данные добавляются во время URLSession. Однако он возвращает первоначально объявленный пустой массив. Я добавил печатные заявления, чтобы вы могли понять, о чем я говорю. Он печатает 2 раньше 1.

    let request = NSMutableURLRequest(url: NSURL(string: "https://utelly-tv-shows-and-movies-availability-v1.p.rapidapi.com/lookup?term=\(searchShow)&country=us")! as URL, cachePolicy: .useProtocolCachePolicy,timeoutInterval: 10.0)
    request.httpMethod = "GET"
    request.allHTTPHeaderFields = headers

    let session = URLSession.shared
    let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
        if (error != nil) {
            //let json = try? JSONSerialization.jsonObject(with: data!, options: [])
            //print(json)

        } else {
            //let httpResponse = response as? HTTPURLResponse
            let decoder = JSONDecoder()
            let json = try! decoder.decode(results.self, from: data!)
            //print(json) (for debugging use only)
            //print(httpResponse)
            for item in json.results{
                for each in item.locations{
                    subscriptions.append(each.display_name)
                }
            }
            //Remove duplicates from array
            let uniqueUnordered = Array(Set(subscriptions))
            let uniqueOrdered = Array(NSOrderedSet(array: uniqueUnordered))
            subscriptions = uniqueOrdered as! [String]
            //Print subscriptions array
            print("1: \(subscriptions)")
        }
    })
    dataTask.resume()
    print("2: \(subscriptions)")
    return subscriptions

output statements

...