Вызов следующей функции после завершения предыдущей

Мне нужно вызвать функцию func fillFields после того, как эта функция getJsonData закончится.

Функция getJsonData - это асинхронная задача для получения данных на сервере для URLRequest.

func getAPIData() {
    let initial = URL(string: "http://10.0.0.2/Blower/app/api/inicial.php")

    DispatchQueue.main.async {
        _ = URLSession.shared.dataTask(with: initial!) { (dados, requisicao, erro) in
            if requisicao != nil {}

            if let dados = dados {
                do {
                    let json = try JSONSerialization.jsonObject(with: dados, options: []) as! [String: Any]
                    /*
                    *
                    */                   
                } catch {
                    print(erro as Any)
                }
            }
        }.resume()
    }
}

Как я могу узнать, завершена ли функция getAPIData?


person Donadon    schedule 04.03.2019    source источник
comment
Вы пробовали мой ответ?   -  person Nikunj Kumbhani    schedule 04.03.2019
comment
Привет, @NikunjKumbhani, я попробую и опубликую здесь   -  person Donadon    schedule 04.03.2019
comment
Привет, @NikunjKumbhani! Эта ошибка появляется: Проверка основного потока: API пользовательского интерфейса вызывается в фоновом потоке: - [WKWebView AssessmentJavaScript: completedHandler:]   -  person Donadon    schedule 04.03.2019
comment
Ваше решение кажется правильным для этого случая, но оно дает ошибку, потому что функция fillFields, которая должна быть вызвана после завершения URLRequest, вызывает ошибку. Поскольку я использую WKWebView, fillFields вызывает функцию javascript для обновления экрана.   -  person Donadon    schedule 04.03.2019


Ответы (1)


Вы можете Идентифицировать с помощью обработчика завершения, когда задача будет завершена следующим образом.

func getAPIData(complition:@escaping (AnyObject?, Error?) -> Void) {

        let initial = URL(string: "http://10.0.0.2/Blower/app/api/inicial.php")

        DispatchQueue.main.async {
            _ = URLSession.shared.dataTask(with: initial!) { (dados, requisicao, erro) in
                if requisicao != nil {}

                if let dados = dados {
                    do {
                        let json = try JSONSerialization.jsonObject(with: dados, options: []) as! [String: Any]

                        complition(json as AnyObject, nil) // When Complete task

                        // Call next function Here

                    } catch {
                        print(erro as Any)
                        complition(nil, erro)
                    }
                } else {
                    complition(nil, erro)
                }
                }.resume()
        }
}

Звоните так

self.getAPIData { (response,error) in
    print(response) // Your response is here after complete task
}
person Nikunj Kumbhani    schedule 04.03.2019
comment
комплимент? Кроме того, вы не избежите закрытия, когда задача будет выполнена. - person El Tomato; 04.03.2019
comment
Итак, поскольку следующая функция - это обновление экрана, появляется следующая ошибка: Проверка основного потока: API пользовательского интерфейса, вызываемый в фоновом потоке: - [WKWebView AssessmentJavaScript: completingHandler:] - person Donadon; 04.03.2019