我有这个问题,我的应用程序需要为一些配置值进行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
}
}
}
})
}
}
答案 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语句来确定它是否是正确的请求。