查看对象 – UICollectionView

我试图将对象添加到数组,以便使用UICollection View查看它们。 我使用Firebase使用此代码:

// Retrieve the products and listen for changes databaseHandle = ref?.child("Products").observe(.childAdded, with: { (snapshot) in // Code to execute when new product is added let prodValue = snapshot.value as? NSDictionary let prodName = prodValue?["Name"] as? String ?? "" let prodPrice = prodValue?["Price"] as? Double ?? -1 let prodDesc = prodValue?["Description"] as? String ?? "" var prodToAddToView = Product(name: prodName, price: prodPrice, currency: "USD", description: prodDesc, location: "USA") self.products.append(prodToAddToView) }) 

但是当循环完成时,不会显示任何对象。 另一方面,使用此代码:

 var pr = Product(name: "a", price: 3, currency: "3", description: "SDF", location: "ASD") products.append(pr) 

该对象显示在UICollectionView中。 如果我以与第二种方法相同的方式添加更多产品,也会显示它们。 我错过了什么? 在范围内添加一个对象不会影响外部的数组吗?

另外 – 在调试的时候,我在observe函数中看到prodToAddToView创建好了。

产品类型[产品]

编辑:

这段代码在我的“ViewDidLoad”函数中,因为我想在加载视图之前加载所有产品。

你需要更新你的collectionView在self.products.append(prodToAddToView)下面的主线程中添加self.collectionView.reloadData() self.products.append(prodToAddToView)

  DispatchQueue.main.async { self.collectionView.reloadData() } 

完整代码

 databaseHandle = ref?.child("Products").observe(.childAdded, with: { (snapshot) in // Code to execute when new product is added let prodValue = snapshot.value as? NSDictionary let prodName = prodValue?["Name"] as? String ?? "" let prodPrice = prodValue?["Price"] as? Double ?? -1 let prodDesc = prodValue?["Description"] as? String ?? "" var prodToAddToView = Product(name: prodName, price: prodPrice, currency: "USD", description: prodDesc, location: "USA") self.products.append(prodToAddToView) DispatchQueue.main.async { self.collectionView.reloadData() } })