2017-06-01 14 views
0

私は現在、迅速な学習をしていますが、今は数時間からエラーを理解しようとしています。私はPHPスクリプトからクエリに感謝のXMLファイルを取得しようとしていると私はコールバックとしてそれらのクエリの結果を得るために完了ハンドラを使用しています。完了ハンドラとスウィフト

問題は、私がこれらの技術に慣れていないということです。問題は、引数が欠落しているということです。ここで

は完了ハンドラを使用する関数です:

func misctest() 
{ 
    let dbc : dataBaseCloner = dataBaseCloner() 
    let output: String 
    connect(completion : { (output) in 
     print(output) 
    }) 
} 

コードが表示さのこの作品のコールについては、このエラー:

func connect(completion: (String) ->()) 
    { 
    let password : String = "psw" 
    let login : String = "log" 
    let postString : String = "login=\(login)&password=\(password)" 
    let urlString = "http://www.mydomain.fr/script.php" 
    var output : String = "" 
    let request = NSMutableURLRequest(url: NSURL(string: urlString)! as URL) 
    request.httpMethod = "POST" 
    request.httpBody = postString.data(using: String.Encoding.utf8) 

    let task = URLSession.shared.dataTask(with: request as URLRequest){ 
     data, response, error in 

     if error != nil { 
      print("error=\(error)") 
      return 
     } 
     let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) 
     print("responseString = \(responseString)") 
     output = responseString as! String 
    } 
    task.resume() 
    completion(output) 
} 

そして、ここでは、私は、この関数を呼び出すコードの一部です接続する:

>>>Missing argument for parameter #2 in call 

どうしたのですか?なぜ2つのパラメータが必要なのでしょうか?

ありがとうございました。

Elbattore

+1

これはあなたのエラーを修復することはできませんが、非同期で出力が常に空であるため、タスクの補完に「完了(出力)」を移動する必要があります –

答えて

1

あなたのコードをコピーしてコピーしましたが、エラーなしで動作しています。 Xcodeの電源を入れ直してみてください。それは非同期だから

はまた、あなたは、あなたのタスク完了にcompletion(output)を移動する必要があり、それなしで、あなたの出力は常に空になります。これは、スーパー奇妙である

(...) 
    let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) 
    print("responseString = \(responseString)") 
    output = responseString as! String 
    completion(output) 
    } 
task.resume() 
(...) 
+0

Xcodeを更新しても、それは動作しません。エラーをさらに複雑にし始めます – Elbattore

0

。私はもう一度試してみました。あなたが尋ねたところで補完しました。私はXcodeを再起動してアップデートし、コンピュータを再起動しましたが、まだこのエラーがあります。私は以下のように二つの新しいパラメータを追加する、それは私に何かを提案しているエラーをクリックすると、この時間:

func misctest() 
{ 
    let dbc : dataBaseCloner = dataBaseCloner() 
    let output: String 
    connect({ (output) in 
     print(output) 
    }, <#UnsafePointer<sockaddr>!#>, <#socklen_t#>) 
    print("working!") 
} 

しかし、それは働いていない私に言う:

cannot convert value of type '(Any)->()' to expected argument type'int32' 

これはとても奇妙です。

関連する問題