自分のサーバーに置かれているPHPスクリプトにPOSTリクエストを行うためのコードをいくつか作成しました。私はテストして、その部分は正常に動作しています。サーバーから返された結果に問題があります。JSON形式で取得し、内部のdo-catchステートメントで印刷します。OKです。私は戻ってくる変数をdo-catchの外で宣言されたvariableに代入し、その変数は「可視」ではありません。あなたがコードを見たときに説明するよりsimplierでしょう、私は私のコードをお見せしましょう:swiftのdo-catchのスコープ - 外部変数に値を割り当てることができません
//sending inputs to server and receiving info from server
let json:[String:AnyObject] = [ "username" : username!, "password" : password!, "iphone" : "1" ]
var link = "http://www.pnc.hr/rfid/login.php"
var novi:String = ""
do {
let jsonData = try NSJSONSerialization.dataWithJSONObject(json, options: .PrettyPrinted)
// create post request
let url = NSURL(string: link)!
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
// insert json data to the request
request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
request.HTTPBody = jsonData
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
let task = NSURLSession.sharedSession().dataTaskWithRequest(request){ data, response, error in
if error != nil{
print("Error 55 -> \(error)")
return
}
do {
let result = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? [String:AnyObject]
print("FIRST PRINT -> \(result!["password"])")
novi = String(result!["password"])
//return result
} catch {
print("Error 43-> \(error)")
}
}
task.resume()
}
catch {
//handle error. Probably return or mark function as throws
print(error)
}
print("SECOND PRINT -> \(novi)")
あなたがprint("FIRST PRINT -> \(result!["password"])")
が表示された場合 - それは、通常、出力のすべての変数を実行します。そして、コードの最後にprint("SECOND PRINT -> \(novi)")
が表示されていれば、変数を割り当てられていないのと同様に、空のスティングを出力します。
これは、「dataTaskWithRequestが非同期に実行する」問題の別のバリエーションであり、do-catchとは何の関係もありません。 –
私はちょうどあなたの答えを変更しました。このコードを見てください。 http://www.wepaste.com/Alvin%20Varghese/ –
Alvin - どのように関数を呼び出すのですか?補完は私のために新しいものです –