App中的当前用户点击来自其他用户的帖子(音频记录)上的Like按钮,它出现在Firebase中的likes
分支中。还有另一个分支records
,其中存在来自每个用户的所有记录。
蓝色:当前用户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)
}
}
我对这个问题有点不清楚,但让我试一试
让我们从问题中的结构开始,使用简单的数据。
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。