ios - 从 NSURLConnect.SendAsyncronousRequest 返回值

标签 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(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/

相关文章:

ios - Cordova 使用 Xcode SQLite 插件构建

ios - 计时器被触发两次但未被取消

android - POST 请求 Android 带有 json 中的参数

php - 从 POST 获取复选框数组值

php - 设置 cookie 并插入数据库时​​遇到问题

ios - AVAudioPlayer 后台任务不适用于 iOS 5.0.1 设备,但它适用于 iOS 5 模拟器

ios - 当前队列、调度队列和目标队列在GCD中是如何相互通信的?

iOS:在 xml 解析完成之前创建 TableView

ios - 二维码添加多个键值对

ios - 调用 dismiss 后 UIViewController 仍在内存中