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

时间:2015-09-24 09:16:24

标签: ios swift grand-central-dispatch swift2

我有这个问题,我的应用程序需要为一些配置值进行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
                    }

                }
            }
        })
    }
}

2 个答案:

答案 0 :(得分:1)

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
                        }

                    }
                }
            })

        })
    }
}

答案 1 :(得分:0)

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

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

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