从Firebase分支(SWIFT)过滤项目

问题描述 投票:0回答:1

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

我有一个Firebase结构enter image description here

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

我需要在我的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)
    }
}
swift firebase
1个回答
1
投票

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

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

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。

© www.soinside.com 2019 - 2024. All rights reserved.