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 に答える