运行 API 另一个调用在 swift 2.0 中完成后调用

Running a API call after another call is finished in swift 2.0

我遇到这个问题,我的应用程序需要对一些配置值进行 api 调用,然后在调用完成后进行实际调用。在我修复调用的方法中,我尝试使用调度方法但没有成功。这里有人可能对如何解决这个问题有明确的解决方案吗?因为现在我一直因此而得到一个零值..

func requestObj(url: Routes, params: Dictionary<String, String>?)
{
    let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
    dispatch_async(dispatch_get_global_queue(priority, 0)) {
        self.requestConfig() // request a valid config before doing anything
        dispatch_async(dispatch_get_main_queue(), {
            if let req = NSMutableURLRequest(urlString: self.config!.api!.baseUrl! + url.rawValue) {
                do {
                    req.addValue(String(self.config!.api!.token!), forHTTPHeaderField: "Token")
                    req.addValue(self.sessionID, forHTTPHeaderField: "SessionID")
                    let opt = HTTP(req)
                    opt.start { response in
                        if let err = response.error {
                            print("error: \(err.localizedDescription)")
                            return
                        }
                        print("opt finished: \(response.description)")
                        //print("data is: \(response.data)") access the response of the data with response.data
                    }

                }
            }
        })
    }
}

向您的 requestConfig 方法添加一个带有闭包的完成处理程序,然后在该完成处理程序中执行操作。

类似的东西,使完成处理程序可选:

func requestConfig(completionHandler completionHandler: (()->())?) {
    // do something and then
    completionHandler?()
}

func requestObj(url: Routes, params: Dictionary<String, String>?) {
    let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
    dispatch_async(dispatch_get_global_queue(priority, 0)) {
        self.requestConfig(completionHandler: { () -> () in
            dispatch_async(dispatch_get_main_queue(), {
                if let req = NSMutableURLRequest(urlString: self.config!.api!.baseUrl! + url.rawValue) {
                    do {
                        req.addValue(String(self.config!.api!.token!), forHTTPHeaderField: "Token")
                        req.addValue(self.sessionID, forHTTPHeaderField: "SessionID")
                        let opt = HTTP(req)
                        opt.start { response in
                            if let err = response.error {
                                print("error: \(err.localizedDescription)")
                                return
                            }
                            print("opt finished: \(response.description)")
                            //print("data is: \(response.data)") access the response of the data with response.data
                        }

                    }
                }
            })

        })
    }
}

您可以将以下 class 转换为 swift:

https://github.com/Shein/Categories/blob/master/NSURLConnection%2BTag.m

使用此 class 您可以在请求中添加一个数字,例如 1。 您可以使用 if 语句来确定它是否是正确的请求。