我有一個返回一個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
}
我要存儲的值從「ND」回調函數返回,但回調外print語句仍然打印一個空的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()之前打印,而viewDidLoad()中的print語句仍然打印爲零。爲什麼會發生這種情況,我需要做些什麼改變?
請參閱我對此線程的回答:http://stackoverflow.com/questions/41209804/waiting-for-asynchronous-function-call-to-complete/41209941#41209941。 –
parseJSON()是一個異步函數。它在你要求它做的工作完成之前立即返回。一旦工作完成,它會調用您傳遞給它的回調。你需要把代碼放到回調函數的大括號中。 –
@DuncanC感謝您的信息。看我的編輯,你能解釋一下嗎? –