如何从Firebase数据库中仅读取Tasks节点下的任务名称?
实现方法
你需要获取的任务名称就是Tasks节点下所有子节点的key值,修改监听代码如下即可:
var postRef: DatabaseReference? // 声明在viewDidLoad外部 var refHandle: DatabaseHandle? // 声明在viewDidLoad外部 // 直接指向Tasks节点,减少不必要的数据读取 postRef = Database.database().reference().child("Tasks") // 监听Tasks节点的数据变化 refHandle = postRef?.observe(DataEventType.value, with: { snapshot in // 先清空原有列表,避免重复存储旧数据 self.listOftasks.removeAll() // 遍历所有任务子节点 for child in snapshot.children { guard let taskSnapshot = child as? DataSnapshot else { continue } // 子节点的key就是你写入时传入的任务标题,也就是任务名称 let taskName = taskSnapshot.key self.listOftasks.append(taskName) } // 这里可插入UI刷新代码,比如tableView.reloadData() })
补充说明
如果你后续需要同时获取任务的描述、截止日期等信息,可在遍历的时候将taskSnapshot.value转换为[String: Any]类型的字典,读取对应的Description和Due Date字段即可。
另外你当前的写入逻辑是用任务标题作为节点key,如果存在两个完全重名的任务,后写入的会覆盖已有的同标题任务,可考虑改用childByAutoId()生成全局唯一的节点key,将任务标题作为节点下的一个字段存储,避免数据覆盖问题。
内容的提问来源于stack exchange,提问作者user17312483
相关产品推荐
相关产品推荐

