Can';t将回调函数中的值存储到类变量中:Swift

Can';t将回调函数中的值存储到类变量中:Swift,swift,asynchronous,callback,Swift,Asynchronous,Callback,我有一个回调函数,它从url中检索内容,但是信息不会存储到类变量中 var counts:Int? var imagesComments : [NSArray] = [] loader.getFeed("1", completionHandler: { response in if let dataArr = response["content"] as? NSArray{ for downloaded_images in dataArr{

我有一个回调函数,它从url中检索内容,但是信息不会存储到类变量中

var counts:Int?
var imagesComments : [NSArray] = []

loader.getFeed("1", completionHandler: { response in
        if let dataArr = response["content"] as? NSArray{
            for downloaded_images in dataArr{
                if let image = downloaded_images as? NSDictionary{
                    let url = image["url"] as? String
                    // Get images and load into images
                    if let comments = image["comments"] as? NSArray{
                        dispatch_async(dispatch_get_main_queue()) {
                            self.imagesComments.append(comments)
                        }
                    }
                    self.loader.downloadImage(NSURL(string: self.baseUrl+url!)!, completionHandler: { response in
                        dispatch_async(dispatch_get_main_queue()) {
                            self.images.append(response)
                            self.pileView?.reloadContent()
                        }
                    })
                }
            }
        }
    })
运行此代码后,我将在一个位置打印imagesComments和counts,两者均为空/nil

JSON文件:

{
"success": true,
"message": null,
"content": [{
    "url": "6\/image_2.png",
    "date_added": "2015-12-02 22:43:05",
    "comments": ["Awesome Pic", "WOOHOOOOO THIS IS GREAT"],
    "likes": []
}, {
    "url": "2\/image_5.png",
    "date_added": "2015-12-01 06:43:48",
    "comments": ["EhHHHH"],
    "likes": []
}]
}

我试图减少代码,但没有意识到这可能会导致混乱。我已经更新了我的代码,让你看到一切原样。我还上传了我的JSON文件。我可以检索所有内容并打印所有内容。例如,如果我在附加到imageComments之前打印(注释),我可以看到该图像的注释。我建议您在此闭包内设置一个断点并单步执行,问题可能会跳到您身上。不过,我用你的JSON试过了,它似乎很管用。困扰我的主要问题是,您正在更新
imagesContents
,而
images
是单独的分派调用,因此当您调用
reloadData
时,它们很容易失去同步。但我想你们的问题比那个更根本。当你说,“在这个代码运行之后,…我打印imagesComments。”你确定你不仅仅是在所有异步内容都有机会完成之前点击了那个代码吗?我确保异步内容已经完成。我在类中还有另一个变量,叫做var images:[UIImage?]=[]。由于某种原因,当我使用self.images.append(响应)时,它工作得非常好。但是,self.imagesComments.append(comments)没有。我尝试设置断点,它转到dispatch_async(dispatch_get_main_queue()){self.imagesComments.append(comment)}。我只是不明白为什么在整个函数运行后imagesComments变为null。还有一件事,我甚至不需要dispatch_async(dispatch_get_main_queue()){来附加到图像。没有它,它就可以工作。很难说是基于提供的内容,但是考虑到您应该避免这两个单独的
dispatch_async
调用(除非您确实有允许这两个数组不同步的代码),我会把
self.imagesComments.append(comments)
放在同一个
dispatch\u async
中,在那里你可以
self.images.append(response)
。这是我能看到的唯一奇怪的事情。如果不是这样,那么问题就在别处(例如,您正在检查这些阵列,一些延迟的东西正在重置其中一个阵列,等等)。是的,我真的认为这是我的代码。代码运行后,它会在我不知道的情况下刷新ViewController。我不知道为什么会发生这种情况,但它正在发生。我将尝试看看我现在能做些什么。