Swift - 数组不会在闭包中追加(数据)

Swift - Array won't .append(data) in closure

我确定我错过了一些明显的东西。

我想使用 Parse Server 将请求中的一些数据填充到字典中。

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)
                }
            }
        }

如果我 : print("Tableau image: \(bookImages)\n") 我的 var bookImages = [String?]() 里什么也没有,即使我里面有东西 coverString #2.

但是如果我 .append("foobar") 除了闭包之外的任何其他地方(尝试)我的字典不是空的。

为什么会有这种奇怪的魔法?

findObjectsInBackgroundWithBlock 是一个异步操作。

所以您的数组(.append 用于数组,而不是字典)可能已正确填充,但您正在查看它时尚未填充尚未

如果将 print 语句 放在 闭包中,您将看到结果。

并且您还应该在那里重新加载 TableView,但将其重新分派到主线程。

示例:

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()
    }

}