0
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 的新手,英语不好,对不起语法。

4

1 回答 1

0

您正在调用异步任务,但看起来您认为它不是异步的。您stat在异步代码块中返回,但您似乎认为它在您的 return 语句被命中之前执行,事实并非如此,您应该阅读线程的工作原理。当您返回时statstat它还不存在,因为它被传递到另一个线程,该线程将花费未知的时间来完成。因此,您需要传入一个回调以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)
            }
    }
于 2015-07-06T16:31:47.007 回答