我对swift编程颇为陌生。我了解到NSURLSession使用异步通信从url获取响应。我怎么可能显示加载状态,直到请求完成,我得到的答复。例如,如果我从文本字段提交NSurlsession的值,并且必须显示另一个包含来自httprequest的响应的文本字段。当我点击提交按钮时,我应该显示一个laoding状态,直到我得到响应,以便用户知道某个过程正在进行,如“加载,请稍候!!”。我们可以在android asyncTask中显示加载状态,直到我们在使用HTTP Post请求时得到响应为止
另外我们如何使用处理程序来知道我们得到了回应。同样,我会因此无法返回零值
这是现在我的功能
{
类FUNC postURL(VAR postString:字符串,VAR postLink:字符串) - > NSDictionary的
{
let link = postLink
let request = NSMutableURLRequest(URL: NSURL(string:link)!)
request.HTTPMethod = "POST"
let values = postString
request.HTTPBody = values.dataUsingEncoding(NSUTF8StringEncoding)
var dictionaryVal:NSDictionary!
var semaphore = dispatch_semaphore_create(0)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request)
{ data, response, error in
guard error == nil && data != nil else
{
print("error=\(error)")
return
}
if let httpStatus = response as? NSHTTPURLResponse where httpStatus.statusCode != 200 {
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(response)")
}
var responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
do{
print(">>>",responseString!)
var dataExample : NSData = (responseString!.dataUsingEncoding(NSUTF8StringEncoding))!
dictionaryVal = try NSJSONSerialization.JSONObjectWithData(dataExample, options:.MutableLeaves) as? NSDictionary
}
catch
{
responseString = nil
print("Error")
}
dispatch_semaphore_signal(semaphore)
}
task.resume()
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
return dictionaryVal!
}
我觉得奇怪的是,你已经实现了NSURLSession的响应处理,但不明白,当你收到的响应如何知道...处理程序执行时,你有反应... – Fonix
我把来自net的代码..我并没有理解 –
这个逻辑啊,在这种情况下,附加到'NSURLSession.sharedSession()。dataTaskWithRequest(request)'的大括号内的所有内容都会在web服务返回时执行一个响应,所以在那里你会把文本放在你的文本字段中,并停止加载指标等 – Fonix