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