-3
我已經提出了一些代碼來向我的php腳本發出POST請求,這些腳本放置在我的服務器上。我已經測試過,那部分工作正常。我從服務器返回結果時遇到了問題 - 我以JSON格式獲取它,並在內部do-catch語句中打印 - 它正常。我將返回變量賦值給在do-catch之外聲明並且不是「visible」的變量。讓我告訴我的代碼,這將是更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 - 我如何調用函數,完成對我而言是新事物 –