を動作していないコールバック関数からの値私は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を印刷しています。
私はここで間違っていますが、どうすれば修正できますか?
EDIT:
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ステートメントはnilを出力します。なぜこれが起こり、具体的に変更する必要がありますか?
このスレッドへの私の答えを見てください:http://stackoverflow.com/questions/41209804/waiting-for-asynchronous-function-call-to-complete/41209941#41209941 –
parseJSON()は非同期関数です。それはあなたがそれを行うように依頼した作業が完了する前にすぐに戻ります。作業が終了すると、渡されたコールバックを呼び出します。コールバック関数の中カッコ内にデータを取得するコードを置く必要があります。 –
@DuncanC情報をありがとう。私の編集を参照してください、あなたは説明できますか? –