2016-08-17 7 views
0

나는 내가 API에서 데이터를 얻고이 방법 내부 클래스라는 WebService를 내부에이 방법이 있습니다스위프트 - 취득 완료 핸들러의 결과

func GetTableDataOfPhase(phase: String, completion: (result: AnyObject) -> Void) 
    { 
     let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() 
     let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil) 

     let requestString = NSString(format:"%@?jobNo=%@", webservice, phase) as String 
     let url: NSURL! = NSURL(string: requestString) 

     let task = session.dataTaskWithURL(url, completionHandler: { 
      data, response, error in 

      dispatch_async(dispatch_get_main_queue(), 
      { 
       do 
       { 
        let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as? [AnyObject] 

        completion(result: json!) 
       } 
       catch 
       { 
        print(error) 
       } 
      }) 

     }) 

     task.resume() 
    } 

지금 같은 다른 클래스에서이 메소드를 호출 오전 그래서 :

WebService().GetTableDataOfPhase("ORC0005") 
    { 
     (result: AnyObject) in 
     self.data = result as! NSArray 
    } 

이것은 예상대로 작동합니다. 지금은 완료 핸들러의 결과를 얻기 위해 노력하고

은 그래서 나는이 작업을 수행 할 수 있습니다

WebService().GetTableDataOfPhase("ORC0005") 
     { 
      (result: AnyObject) in 
      self.data = result as! NSArray 
     } 

     print(self.data.count) 

지금 self.data.count 0,하지만 난 중괄호 안에이 인쇄 문을 넣을 때 , 그것은 70입니다 어떻게 self.data.count 사용할 수 있도록 중괄호 외부 결과를 얻으려면? 클래스에서

+0

실제로 데이터 사용 방법을 보여주는 질문을 업데이트해야합니다. – dan

+0

완료 핸들러가 비동기 적으로 호출됩니다. 다른 방법으로 그렇게하십시오. ** 중괄호 안의 결과 **를 사용하십시오. 그리고 일관된 타입을 사용하면'[AnyObject]'->'AnyObject' ->'NSArray' 같은 것을 세 가지 타입으로 사용할 수 있습니다. – vadian

답변

-1

var yourData:NSArray? 

그리고

WebService().GetTableDataOfPhase("ORC0005") 
      { 
       (result: AnyObject) in 
       for res in result 
       { 
        self.yourData.append(res) 
       } 


      } 

    dispatch_async(dispatch_get_main_queue(), { 
    print(self.yourData.count) 


    } 
+2

아무 것도 바뀌지 않습니다. 타이밍 문제입니다. – vadian

+0

dispatch async에서 인쇄물을 추가하십시오. 내 코드 – Muhammed

+0

여전히 수정되지 않습니다. – dan

2

확인을 방법을 추가, 여기, 당신이 dataTaskWithURL (비동기)를 호출하고 당신의 문제입니다.

print(self.data.count) 

가 귀하의 웹 서비스 호출이 아직 완료되지 않은 : 당신이 할 당시

.

이 줄을 중괄호 안에 넣으면 호출에 응답이있을 때만 실행됩니다. 그것이 예상대로 작동하는 이유입니다.

아직 타이밍이 맞지 않아 아직 평가되지 않은 가치를 평가하려고합니다.