Swift - 数组不会.append(数据)关闭

时间:2016-03-18 14:46:13

标签: arrays swift append

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

使用解析服务器我想将请求中的一些数据填充到字典中。

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”)在其他任何地方(尝试),除了在闭包中我的字典不是空的。

为什么这个奇怪的魔法?

1 个答案:

答案 0 :(得分:1)

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

}