从回调函数获取值不起作用

时间:2017-04-14 00:41:20

标签: ios swift callback nsdictionary

我有一个返回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()中的print语句之前打印,viewDidLoad()中的print语句仍然打印nil。为什么会发生这种情况,我需要具体改变什么?

1 个答案:

答案 0 :(得分:0)

看起来parseJSON在后​​台运行,并且只有在 viewDidLoad方法结束后才能完成。因此,nd将在通话后立即保持为空。

我的建议:在上述回调中添加词典处理逻辑 (然后将结果复制到 之外的变量你的viewDidLoad方法)。