我正在尝试返回变量statusCode,它应该接受NSHTTPURLResponse的statusCode属性的值,但是我得到零,即使当我检查时,我看到数据已经成功地发布了。它返回我用.初始化变量的0。我该怎么做?谢谢。
var statusCode = 0
let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_async(queue) {
let request = NSMutableURLRequest(URL: NSURL(string: escapedUrl!)!)
request.HTTPMethod = "POST"
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
statusCode = 0
} else if let httpResponse = response as? NSHTTPURLResponse {
if httpResponse.statusCode == 200 {
statusCode = httpResponse.statusCode
} else {
statusCode = 0
}
}
}
task.resume()
}
return statusCode
}发布于 2015-12-02 13:51:47
在异步调用返回结果之前返回statusCode。您可以通过传递一个闭包并在web服务返回结果时调用它来处理这种情况。对于该方法,实现如下所示:
func postData(escapedUrl : String?, onCompletion:(Int)->Void)
{
let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_async(queue)
{
let request = NSMutableURLRequest(URL: NSURL(string: escapedUrl!)!)
request.HTTPMethod = "POST"
let task = NSURLSession.sharedSession().dataTaskWithRequest(request)
{
data, response, error in
var statusCode = 0
if error != nil
{
statusCode = 0
}
else if let httpResponse = response as? NSHTTPURLResponse
{
if httpResponse.statusCode == 200
{
statusCode = httpResponse.statusCode
}
else
{
statusCode = 0
}
}
// Passing back the result
onCompletion(statusCode);
}
task.resume()
}
}您可以像这样调用该方法:
postData("yourURLString") { (statusCode) -> Void in
// Check status code here
}https://stackoverflow.com/questions/34044250
复制相似问题