func postToServerAction() -> String{
var stat = ""
var url: NSURL = NSURL(string: /*External LinK */)!
var request:NSMutableURLRequest = NSMutableURLRequest(URL:url)
var bodyData = "Username=" + userTxt.text + "&Password=" + passwordTxt.text
//var bodyData = "Username=" + userTxt.text
request.HTTPMethod = "POST"
request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding);
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue())
{
(response, data, error) in
var reciveData = NSString(data:data,encoding: NSUTF8StringEncoding)
if(reciveData == "false")
{
stat = "YES"
}else{
stat = "NO"
}
}
return stat
}
这里有一些代码
我想返回我的变量,但里面没有任何价值。 可能是NSURLConnection.sendAsynchronousRequest(请求,队列:NSOperationQueue.mainQueue())上的问题,任何人都可以告诉我如何管理这个功能。 我想从NSURLConnection.sendAsynchronousRequest
返回值在我的情况下没有返回值和我的变量" reviceData"给我正确的价值,但我仍然无法将其分配给任何变量
我是快速的新人,而且英语不好对不起语法。
答案 0 :(得分:0)
您正在调用异步任务,但看起来您认为它不是异步的。你在异步代码块中返回stat
,但你似乎认为它在你的返回语句被执行之前执行了,但事实并非如此,你应该读一下线程如何工作。当您返回stat
时,stat
尚未存在,因为它已传递到另一个需要未知时间才能完成的线程。因此,当异步任务中存在stat
时,您需要传入一个回调函数。请参阅下文,我如何编辑您的代码(callbackToFire
需要由您创建和传递)。
func postToServerAction(callbackToFire:(String)->Void) -> Void{
var stat = ""
var url: NSURL = NSURL(string: /*External LinK */)!
var request:NSMutableURLRequest = NSMutableURLRequest(URL:url)
var bodyData = "Username=" + userTxt.text + "&Password=" + passwordTxt.text
//var bodyData = "Username=" + userTxt.text
request.HTTPMethod = "POST"
request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding);
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue())
{
(response, data, error) in
var reciveData = NSString(data:data,encoding: NSUTF8StringEncoding)
if(reciveData == "false")
{
stat = "YES"
}else{
stat = "NO"
}
callbackToFire(stat)
}
}