는 나는있는 NSDictionary를 반환하는 콜백 기능을 가지고 :얻기 값은
override func viewDidLoad()
{
super.viewDidLoad()
var nd: NSDictionary = [:]
parseJSON(callback: {dict in
nd = dict
//print(nd) This one prints the filled dictionary correctly
})
//print(nd) This one prints an empty dictionary
}
나는 값이 "차"의 콜백 함수에서 반환 저장할하지만 콜백 외부 인쇄 문 여전히 비어있는 NSDictionary를 인쇄 중입니다.
여기서 내가 뭘 잘못하고 있으며 어떻게 해결할 수 있습니까?
편집 :
var nd: NSDictionary! = nil
override func viewDidLoad()
{
super.viewDidLoad()
loadData()
print(self.nd)
}
func loadData()
{
parseJSON(callback: {dict in
self.nd = dict
print(self.nd)
})
}
나는이로 변경 때문에 함수는 다음의로드 및 인쇄를 완료합니다. 그러나 viewDidLoad()의 print 문은 loadData()에있는 print 문보다 먼저 인쇄되고 viewDidLoad()의 print 문은 여전히 nil을 인쇄합니다. 왜 이런 일이 일어나고 특별히 변경할 필요가 있습니까?
이 글타래에 대한 내 답변보기 : http://stackoverflow.com/questions/41209804/waiting-for-asynchronous-function-call-to-complete/41209941#41209941. –
parseJSON()은 비동기 함수입니다. 당신이 요청한 작업이 완료되기 전에 즉시 반환됩니다. 작업이 끝나면 전달 된 콜백을 호출합니다. 콜백 함수의 중괄호 안에 데이터를 가져올 코드를 넣어야합니다. –
@DuncanC 정보를 제공해 주셔서 감사합니다. 내 편집을 참조하십시오. 설명해 주시겠습니까? –