値が1に等しいすべてのユーザーを返すことで、どのようにタップしたかをすべてのユーザーの数を取得しようとしています。これは適切な方法ですか。以下は、それらが実行されるかどうかを設定するために使用している関数です。誰かが私が行くすべての人の数を返すのを手伝ってくれますか
func didTapGoing(for cell: HomePostCell) {
guard let indexPath = collectionView?.indexPath(for: cell) else { return }
var post = self.posts[indexPath.item]
guard let postId = post.id else { return }
guard let uid = FIRAuth.auth()?.currentUser?.uid else { return }
let values = [uid: post.isGoing == true ? 0 : 1]
FIRDatabase.database().reference().child("going").child(postId).updateChildValues(values) { (err, _) in
if let err = err {
print("Failed to pick going", err)
return
}
post.isGoing = !post.isGoing
self.posts[indexPath.item] = post
self.collectionView?.reloadItems(at: [indexPath])
}
}
共有したコードはデータを読み取りませんが、で更新するだけupdateChildValues
です。
子ノードの数を数えるには、それらのノードを読み取ってからを呼び出す必要がありますDataSnapshot.childrenCount
。
FIRDatabase.database().reference().child("going").child(postId).observe(DataEventType.value, with: { (snapshot) in
print(snapshot.childrenCount)
})
値が1の子ノードのみをカウントする場合は、次のようにします。
FIRDatabase.database().reference().child("going").child(postId)
.queryOrderedByValue().queryEqual(toValue: 1)
.observe(DataEventType.value, with: { (snapshot) in
print(snapshot.childrenCount)
})
詳細については、データの並べ替えとフィルタリングに関するFirebaseのドキュメントをご覧ください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加