从 NSURLConnect.SendAsyncronousRequest 返回值
Returning value from NSURLConnect.SendAsyncronousRequest
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
}
这里是一些代码
我想 return 我的变量,但里面没有值。
可能是 NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) 上的问题 谁能告诉我如何管理这个函数。
我想 return 来自 NSURLConnection.sendAsynchronousRequest
的值
在我的例子中没有 return 值,我的变量 "reviceData" 给了我正确的值,但我仍然无法将它分配给任何变量
我是 swift 的新手,英语不好,语法错误。
您正在调用一个异步任务,但您似乎认为它不是异步的。您在异步代码块中 returning stat
但您似乎认为它是在您的 return 语句被命中之前执行的,事实并非如此,您应该阅读线程的工作原理.当您 return 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)
}
}
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
}
这里是一些代码
我想 return 我的变量,但里面没有值。 可能是 NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) 上的问题 谁能告诉我如何管理这个函数。 我想 return 来自 NSURLConnection.sendAsynchronousRequest
的值在我的例子中没有 return 值,我的变量 "reviceData" 给了我正确的值,但我仍然无法将它分配给任何变量
我是 swift 的新手,英语不好,语法错误。
您正在调用一个异步任务,但您似乎认为它不是异步的。您在异步代码块中 returning stat
但您似乎认为它是在您的 return 语句被命中之前执行的,事实并非如此,您应该阅读线程的工作原理.当您 return 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)
}
}