斯威夫特 - 阵列不会关闭.append(数据) [英] Swift - Array won't .append(data) in closure

查看:189
本文介绍了斯威夫特 - 阵列不会关闭.append(数据)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我敢肯定,我错过了一些东西明显。

I'm sure I miss something obvious.

使用解析服务器我想从进入字典的要求填写了一些数据。

Using Parse Server I want to fill some data from a request into a dictionary.

query.findObjectsInBackgroundWithBlock { (books, error) in
            guard (books != nil) else {
                print(error)
                return
            }
            for book in books! {
                print("\n\n\(book)")  //#1 Got some book

                if let coverString = book["cover"] {
                    print("coverString OK : \(coverString)") //#2 got a valid String
                    self.bookImages.append(coverString as? String)
                } else {
                    print("coverString nil")
                    self.bookImages.append(nil)
                }
            }
        }

如果我:打印(的Tableau形象:\\(bookImages)\\ n)我没有什么在我的 VAR bookImages = [字符串? ()就算我得到了内在的东西 coverString 2

If I : print("Tableau image: \(bookImages)\n") I got nothing in my var bookImages = [String?]() even if I got something inside coverString #2.

但如果我.append(FOOBAR),其他地方(试试)除在封我的字典不是空的。

but if I .append("foobar") anywhere else (to try) except in the closure my dictionary is not empty.

为什么这个奇怪的魔力呢?

Why this strange magic ?

推荐答案

findObjectsInBackgroundWithBlock 是一个异步操作。

所以你的阵列( .append 是数组,而不是字典)可能是正确填充,但你正在寻找它不填充时,它的没有

So your array (.append is for arrays, not dictionaries) is probably populated correctly but you are looking at it when it's not populated yet.

您将看到的结果,如果你把你的打印语句的结束。

You will see the results if you put your print statements inside the closure.

和你也应该重新加载的TableView存在,但它重新调度的主线程。

And you should also reload the TableView there, but with redispatching it to the main thread.

例如:

query.findObjectsInBackgroundWithBlock { (books, error) in
    guard (books != nil) else {
        print(error)
        return
    }
    for book in books! {

        if let coverString = book["cover"] {
            print("coverString OK : \(coverString)")
            self.bookImages.append(coverString as? String)
        } else {
            print("coverString nil")
            self.bookImages.append(nil)
        }

        if let titleString = book["title"] {
            print("titleString OK : \(titleString)")
            self.bookTitle.append(titleString as? String)
        } else {
            print("titleString nil")
            self.bookTitle.append("No Title")
        }
    }

    print("Tableau image2: \(self.bookImages)\n")
    print("Tableau title2: \(self.bookTitle)\n")

    dispatch_async(dispatch_get_main_queue()) {
        self.collectionView?.reloadData()
    }

}

这篇关于斯威夫特 - 阵列不会关闭.append(数据)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆