首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从NSUrlSession仅返回NSHttpUrlResponse状态代码

如何从NSUrlSession仅返回NSHttpUrlResponse状态代码
EN

Stack Overflow用户
提问于 2016-02-09 17:41:29
回答 1查看 2K关注 0票数 0

如何从NSUrlSession只返回一个NSHttpUrlResponse状态代码。我对这个language.So非常陌生,如果还有其他更好的做法,请让我know.My代码就在这里下面。

代码语言:javascript
复制
//Method to return a status code
        func responseCode() -> Int{
        var responseCode : Int=0
        if Reachability.isConnectedToNetwork() == true {
        // get news feed url
        let url = NSURL(string: baseUrl)
        let session = NSURLSession.sharedSession()
//create request
        let request = NSMutableURLRequest(URL: url!)
        request.HTTPMethod = httpMethod
//check null value
        if (bodyData != "") {
            request.HTTPBody =  bodyData.dataUsingEncoding(NSUTF8StringEncoding);
        }
        if (auth != "") {
            print("Token Auth : \(auth)")
            request.addValue("bearer \(self.auth)", forHTTPHeaderField:      "Authorization")
        }
        print("request : \(request)")

//How to return a Integer from this below function
        let task = session.dataTaskWithRequest(request,     completionHandler: {(data, response, error) -> Void in
            print("Error\(error)")
            if let httpResponse = response as? NSHTTPURLResponse {
                print("HttpReponse\(httpResponse.statusCode)")
                // Get a status code and assign it in a variable
                responseCode = httpResponse.statusCode
            }
        })
        task.resume()
//Return a response code in ViewController but it just return a initial set value that is 0
        return responseCode
        }
//Return a responseCode in ViewController but it just return a    initial set value that is 0
    return responseCode
    }
EN

回答 1

Stack Overflow用户

发布于 2016-02-09 18:11:46

在这里,session.dataTaskWithRequest是一个异步任务,也就是说,它将在另一个线程(不是主线程)中被调用,当你从服务器得到响应时,它的闭包将被调用。

所以你在这里做的是试图返回responseCode,这是在主线程中调用的,也就是说,它会在你得到任何响应之前返回。

您应该使用完成处理程序:

代码语言:javascript
复制
func responseCode(completion: (statusCode:Int) -> ()){
        if Reachability.isConnectedToNetwork() == true {

            let url = NSURL(string: baseUrl)
            let session = NSURLSession.sharedSession()

            let task = session.dataTaskWithRequest(request,completionHandler: {(data, response, error) -> Void in
                print("Error\(error)")

                if let httpResponse = response as? NSHTTPURLResponse {

                    print("HttpReponse\(httpResponse.statusCode)")
                    // Get a status code and assign it in a variable
                    completion(statusCode: httpResponse.statusCode)

                }
            })
            task.resume()
        }
    }

如下所示使用此函数:

代码语言:javascript
复制
responseCode { (statusCode) -> () in
            print("Status Code:\(statusCode)")
    }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35288533

复制
相关文章

相似问题

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