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

标签 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”中,但回调外部的打印语句仍然打印一个空的 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()中的打印语句在loadData()中的打印语句之前打印,而viewDidLoad()中的打印语句仍然打印nil。为什么会发生这种情况,我需要具体更改什么?

最佳答案

看起来 parseJSON 在后台运行,并且可能仅在 viewDidLoad 方法结束后完成。因此,nd 在调用后将立即保持为空。

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

关于ios - 从回调函数获取值不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43403712/

相关文章:

iphone - 在分组的UITableViewCell中指定backgroundcolor

javascript - 我怎样才能让 `.then()` 保持足够长的时间以实现具有 native promise 的轮询功能?

node.js - 退出模块,但不退出整个 NodeJS 进程

c++ - C++ 的面向对象回调?

iOS - 收到内存警告

ios - 关于 iCarousel 和标签 iOS

ios - 堆栈 View 中的约束导致奇怪的问题

swift - 来自解析的数据未通过 prepareForSegue 传递

ios - 从左侧在 UILabel 中插入文本

php - 我可以在 Swift 的 header 中使用 token 来授权数据库连接吗?