如何从NSUrlSession只返回一个NSHttpUrlResponse状态代码。我对这个language.So非常陌生,如果还有其他更好的做法,请让我know.My代码就在这里下面。
//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
}发布于 2016-02-09 18:11:46
在这里,session.dataTaskWithRequest是一个异步任务,也就是说,它将在另一个线程(不是主线程)中被调用,当你从服务器得到响应时,它的闭包将被调用。
所以你在这里做的是试图返回responseCode,这是在主线程中调用的,也就是说,它会在你得到任何响应之前返回。
您应该使用完成处理程序:
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()
}
}如下所示使用此函数:
responseCode { (statusCode) -> () in
print("Status Code:\(statusCode)")
}https://stackoverflow.com/questions/35288533
复制相似问题