나는 내가 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 사용할 수 있도록 중괄호 외부 결과를 얻으려면? 클래스에서
실제로 데이터 사용 방법을 보여주는 질문을 업데이트해야합니다. – dan
완료 핸들러가 비동기 적으로 호출됩니다. 다른 방법으로 그렇게하십시오. ** 중괄호 안의 결과 **를 사용하십시오. 그리고 일관된 타입을 사용하면'[AnyObject]'->'AnyObject' ->'NSArray' 같은 것을 세 가지 타입으로 사용할 수 있습니다. – vadian