首页 > 解决方案 > 从 Firebase 分支过滤项目 (SWIFT)

问题描述

应用程序中的当前用户在另一个用户的帖子(音频记录)上点击“赞”按钮,它会出现likes在 Firebase 的分支中。还有另一个分支records,其中存在来自每个用户的所有记录。

我有一个 Firebase 结构 在此处输入图像描述

蓝色:当前用户 ID,绿色:另一个用户 ID,红色:记录 ID。

我需要在我的 ViewController 上显示只喜欢的记录(红线),但是使用我的代码,我已经从另一个用户那里获得了所有记录(绿线)。如何只显示喜欢的记录(红线)?

 fileprivate func fetchRecordsWithUser(user: User2){

    let ref = Database.database().reference().child("records").child(user.uid)
    ref.observeSingleEvent(of: .value, with: { (snapshot) in

        guard let dictionaries = snapshot.value as? [String: Any] else { return }

        dictionaries.forEach({ (key, value) in
            guard let dictionary = value as? [String: Any] else { return }
            let record = Records(user: user, dictionary: dictionary)
            self.records.append(record)
            self.records.sort(by: { (p1, p2) -> Bool in
                return p1.creationDate.compare(p2.creationDate) == .orderedDescending
            })
            self.tableView?.reloadData()
        })
    }) { (err) in
        print ("Faild to fetch records:", err)
    }
}

标签: swiftfirebase

解决方案


我对这个问题有点不清楚,但让我试试看

让我们从问题中的结构开始,使用更简单的数据。

likes
   uid_0
      uid_1
         record_0: true
      uid_2
         record_1: true
   uid_1
      uid_0
         record_3: true

我相信对象是获取值record_0、record_1和record_3,所以这样做的代码是:

func printRecordIds() {
    var recordIdArray = [String]()
    let likesRef = self.ref.child("likes")
    likesRef.observeSingleEvent(of: .value, with: { snapshot in
        let allLikes = snapshot.children.allObjects as! [DataSnapshot]
        for likeSnap in allLikes {
            let uid = likeSnap.key
            print(uid)
            let uidLikes = likeSnap.children.allObjects as! [DataSnapshot]
            for childLike in uidLikes {
                let childUid = childLike.key
                print("  child uid: \(childUid)")
                let childRecords = childLike.children.allObjects as! [DataSnapshot]
                for child in childRecords {
                    let recordId = child.key
                    print("    recordId: \(recordId)")
                    recordIdArray.append(recordId)
                }
            }

            for r in recordIdArray {
                print(r)
            }
        }
    })

和输出

uid_0
  child uid: uid_1
    recordId: record_0
  child uid: uid_2
    recordId: record_1
record_0
record_1
uid_1
  child uid: uid_0
    recordId: record_3

record_0
record_1
record_3

因此,输出显示了我们正在每个节点读取的数据,因此您可以看到流程,然后是数组,其中填充了记录 id。


推荐阅读