首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从变量中的statusCode返回NSHTTPURLResponse

从变量中的statusCode返回NSHTTPURLResponse
EN

Stack Overflow用户
提问于 2015-12-02 13:42:44
回答 1查看 236关注 0票数 0

我正在尝试返回变量statusCode,它应该接受NSHTTPURLResponse的statusCode属性的值,但是我得到零,即使当我检查时,我看到数据已经成功地发布了。它返回我用.初始化变量的0。我该怎么做?谢谢。

代码语言:javascript
复制
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

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-02 13:51:47

在异步调用返回结果之前返回statusCode。您可以通过传递一个闭包并在web服务返回结果时调用它来处理这种情况。对于该方法,实现如下所示:

代码语言:javascript
复制
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()
    }
}

您可以像这样调用该方法:

代码语言:javascript
复制
postData("yourURLString") { (statusCode) -> Void in
    // Check status code here
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34044250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档