首页 > 解决方案 > 终止前一个后调用下一个函数

问题描述

在 func getJsonData结束后,我需要调用 func fillFields

func 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 是否完成?

标签: iosswiftmultithreadingdispatch-queue

解决方案


当任务像这样完成时,您可以使用完成处理程序进行识别。

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
}

推荐阅读