Firebase实时数据库(Swift):仅获取JSON结构的title字段
嘿,我来帮你搞定这个需求!在Swift里对接Firebase实时数据库提取ordini节点下的所有日期字符串(也就是该节点的子节点名称对吧?)其实很简单,下面给你两种常用的实现方式:
方法一:单次读取所有日期节点名
如果只需要一次性获取当前ordini下的所有日期字符串,用单次读取就够了:
首先导入Firebase数据库模块,然后定位到目标节点:
import FirebaseDatabase // 获取ordini节点的数据库引用 let ordiniRef = Database.database().reference().child("ordini")
接着读取节点数据并提取子节点名称:
ordiniRef.observeSingleEvent(of: .value) { snapshot in // 把所有子节点转换成DataSnapshot数组 guard let childSnapshots = snapshot.children.allObjects as? [DataSnapshot] else { print("未找到任何子节点") return } // 提取每个子节点的key(也就是你要的日期字符串) let dateTitles = childSnapshots.map { $0.key } // 这里可以根据业务需求处理这个数组,比如打印、存储到本地等 print("提取到的日期列表:\(dateTitles)") }
方法二:实时监听日期节点的变化
如果需要实时感知ordini下新增或删除的日期节点(比如有新的日期节点添加时自动获取),可以用实时监听:
// 监听新增的日期节点 ordiniRef.observe(.childAdded) { snapshot in let newDate = snapshot.key print("新增日期节点:\(newDate)") } // 监听删除的日期节点 ordiniRef.observe(.childRemoved) { snapshot in let removedDate = snapshot.key print("删除日期节点:\(removedDate)") } // 如果需要初始化时先获取当前所有日期,还是可以结合单次读取来实现 ordiniRef.observeSingleEvent(of: .value) { snapshot in guard let childSnapshots = snapshot.children.allObjects as? [DataSnapshot] else { return } let initialDates = childSnapshots.map { $0.key } print("初始日期列表:\(initialDates)") }
补充说明
如果你的需求是提取子节点内部的title字段(而非节点名称),只需要把map里的$0.key改成$0.childSnapshot(forPath: "title").value as? String就行,记得处理可选值的情况哦。
内容的提问来源于stack exchange,提问作者Luca Morara
相关产品推荐
相关产品推荐

