从NSURLConnect.SendAsyncronousRequest返回值

时间:2015-07-06 16:14:09

标签: ios swift post nsurlconnection sendasynchronousrequest

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"给我正确的价值,但我仍然无法将其分配给任何变量

我是快速的新人,而且英语不好对不起语法。

1 个答案:

答案 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)
            }
    }