I programmed a tableView which displays posts from my Firebase database. In my sidebar (before the user gets to the tableView) I added a label which should display the number of Posts displayed in the tableView, so the user knows if there's something inside. So my question is: How can I track the number of children, stored under my topic "offers" and display them in my counterLbl?
var ref: DatabaseReference!
ref = Database.database().reference()
ref.child("offers").observe(.childAdded, with: { snapshot in
counterLbl.text = ...
}
答案 0 :(得分:1)
如果您已经在听.childAdded
,则可以保留一个计数器并将其递增:
var nodeCount: Int = 0
ref.child("offers").observe(.childAdded, with: { snapshot in
nodeCount = nodeCount + 1
counterLbl.text = String(nodeCount)
}
如果您的用例还可以将节点从数据库中删除,则还应该侦听.childRemoved
来减少计数器的数量:
ref.child("offers").observe(.childRemoved, with: { snapshot in
nodeCount = nodeCount - 1
counterLbl.text = String(nodeCount)
}
请注意,此方法要求您下载要计数的所有节点。在您当前的情况下,这应该可以正常工作,因为无论如何您都在下载所有优惠。但是随着获取更多数据,您可能只想读取/显示商品的一个子集,在这种情况下,上面的代码将只计算该子集中的节点。
在这种情况下,如果您仍然希望所有商品的计数,通常的方法是在数据库中保留一个单独的计数器值,该计数器值在每次添加/删除商品时都会更新。有关更多信息,请参见:
答案 1 :(得分:0)
步骤1。 用您要存储的值创建一个类
class ListModel: NSObject {
var UID:String?
var Name:String?
var Email:String?
}
第2步。 在您的ViewController中,添加以下代码
var ListArr = [ListModel]()
let ref = Database.database().reference().child("offers")
ref.observe(.childAdded, with: { (snapshot) in
print(snapshot)
guard let dictionary = snapshot.value as? [String : AnyObject] else {
return
}
let Obj = ListModel()
Obj.UID = snapshot.key
Obj.Name = dictionary["name"] as? String
Obj.Email = dictionary["email"] as? String
self.ListArr.append(Obj)
self.myTableView.delegate = self
self.myTableView.dataSource = self
self.myTableView.reloadData()
}, withCancel: nil)