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(request,queue: NSOperationQueue.mainQueue()) 上的问题,任何人都可以告诉我如何管理这个函数。 我想从 NSURLConnection.sendAsynchronousRequest 返回值
就我而言,没有返回值,我的变量“reviceData”给了我正确的值,但我仍然无法将其分配给任何变量
我是 swift 新手,英语不好,抱歉语法。
最佳答案
您正在调用异步任务,但看起来您认为它不是异步的。您正在异步代码块中返回 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)
}
}
关于ios - 从 NSURLConnect.SendAsyncronousRequest 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31250720/