我建立了我的应用程序,像facebook一样提供新闻。我的问题是我不知道如何在images中获取childPost并在collectionView中显示它。请教我怎么做。谢谢你的帮助。
以下是数据库结构:

Posts
   d7j3bWMluvZ6VH4tctQ7B63dU4u1:
       20181112101928:
          avatar: "https://platform-lookaside.fbsbx.com/platform/p..."
          content: "Funny image"
          images:
              -LR4vaEIggkGekc-5ZME:
                       "https://firebasestorage.googleapis.com/v0/b/hon..."
              -LR4vaENC-IsePibQYxY:
                       "https://firebasestorage.googleapis.com/v0/b/hon..."
          name: "Thành Trung"
          time: 1541992768776.3628
          type: "Funny"

这是我的代码:
   func getDataFromPostFirebase() {
        let getPostData = databaseReference.child("Posts")
        getPostData.observe(.childAdded) { (snapshot) in
            getPostData.child(snapshot.key).observe(.childAdded, with: { (snapshot1) in
                getPostData.child(snapshot.key).child(snapshot1.key).observe(.value, with: { (snapshot2) in
                    self.arrayImageUrl = [String]()
                    if let dict = snapshot2.value as? [String : Any] {
                        guard let avatar = dict["avatar"] as? String else {return}
                        guard let content = dict["content"] as? String else {return}
                        guard let name = dict["name"] as? String else {return}
                        guard let time = dict["time"] as? Double else {return}
                        guard let type = dict["type"] as? String else {return}
                        if let images = dict["images"] as? [String : String] {
                            for image in images.values {
                                self.arrayImageUrl.append(image)
                            }
                            let newPost = Post(avatarString: avatar, contentString: content, nameString: name, timeDouble: time, typeString: type)
                            self.arrayPost.append(newPost)
                            DispatchQueue.main.async {
                                self.feedTableView.reloadData()
                            }
                        } else {
                            let newPost = Post(avatarString: avatar, contentString: content, nameString: name, timeDouble: time, typeString: type)
                            self.arrayPost.append(newPost)
                            DispatchQueue.main.async {
                                self.feedTableView.reloadData()
                            }
                        }
                    }
                })
            })
        }
    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return arrayImageUrl.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionViewCell", for: indexPath) as! TrangChu_CollectionViewCell

        cell.imgContent.layer.cornerRadius = CGFloat(8)
        cell.imgContent.clipsToBounds = true
        cell.imgContent.layer.borderWidth = 2
        cell.imgContent.layer.borderColor = #colorLiteral(red: 0.4756349325, green: 0.4756467342, blue: 0.4756404161, alpha: 1)

        let url = URL(string: arrayImageUrl[indexPath.row])
        cell.imgContent.sd_setImage(with: url, completed: nil)

        return cell
    }

模型对象
import Foundation

class Post {
    var avatar : String
    var content : String
    var images : [String]?
    var name : String
    var time : Double
    var type : String

    init(avatarString : String, contentString : String, nameString : String, timeDouble : Double, typeString : String) {
        avatar = avatarString
        content = contentString
//        images = imagesString
        name = nameString
        time = timeDouble
        type = typeString
    }
}

最佳答案

正如我所说你的数据库结构不好。我建议你把它重新构造成这样。

Posts
   d7j3bWMluvZ6VH4tctQ7B63dU4u1:
      avatar: "https://platform-lookaside.fbsbx.com/platform/p..."
      content: "Funny image"
      images:
          -LR4vaEIggkGekc-5ZME: "https://firebasestorage.googleapis.com/v0/b/hon..."
          -LR4vaENC-IsePibQYxY: "https://firebasestorage.googleapis.com/v0/b/hon..."
      name: "Thành Trung"
      time: 1541992768776.3628
      type: "Funny"
      timestamp: 1540276959924

我移除了时间戳节点,并将其沿着子节点传输。现在你可以用这个来取帖子了。
ref.child("Posts").observe(.childAdded) { (snapshot) in
        var post = Post()

        let val = snapshot.value as! [String: Any]
        post.name = val["name"] as? String

        self.ref.child("Posts").child(snapshot.key).child("images").observeSingleEvent(of: .value, with: { (snap) in
            post.imagesString = [String]()
            for image in snap.children.allObjects as! [DataSnapshot] {
                post.imagesString?.append(image.value as! String)
                print("images \(image.value)")
            }

            list.append(post)
            print("post \(post)")
        })

如果您想订购文章,可以使用queryorderbeychild(“timestamp”)实现它。

10-07 19:11
查看更多