2016-07-10 6 views
-3

내 서버에 배치 된 PHP 스크립트에 POST 요청을하도록 코드를 만들었습니다. 나는 테스트를했고 그 부분은 잘 작동하고있다. 서버에서 반환되는 결과에 문제가 있습니다. JSON 형식으로 가져 와서 내부 do-catch 문에 인쇄합니다. OK입니다. 나는 반환 변수를 do-catch 외부에서 선언 된 변수에 할당하고 해당 변수를 "표시"하지 않습니다. 당신은 코드를 볼 때 설명하기보다 더 간단 할 것이다, 내 코드를 보여 드리죠 :신속한 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)")이 표시되면 변수를 할당하지 않은 것처럼 빈 스팅이 출력됩니다.

+2

"dataTaskWithRequest는 비동기식으로 실행됩니다"문제의 또 다른 변형이며 do-catch와는 아무런 관련이 없습니다. –

+0

방금 ​​답변을 수정했습니다. 이 코드를 살펴보십시오. http://www.wepaste.com/Alvin%20Varghese/ –

+0

Alvin - 어떻게 함수를 호출합니까? 완성은 저에게 새로운 것입니다. –

답변

0

비동기 블록을 사용 중입니다. print 문은 블록에 novi를 설정하기 전에 실행됩니다.

이 문제는 do-catch 문제는 아니지만 비동기 문제입니다.