Firebase实时数据库Swift遍历子节点获取timeDetected值
如何从Firebase实时数据库子节点快照中提取
timeDetected值(Swift) 问题描述
我需要遍历Firebase实时数据库中ID为“00001”的所有子节点,仅获取每个子节点的timeDetected值。当前我的Swift代码是:
for item in snapshot.children { print(item) }
控制台输出的是完整的子节点快照:
Snap (fouihbnfqwubfwqouyb) { timeDetected = "2018-05-28T16:00:13Z"; } Snap (fouihbnfqwubtgowqouyb) { timeDetected = "2018-05-28T16:00:18Z"; } Snap (fouohbnfqwubtgowqouyb) { timeDetected = "2018-05-28T16:00:43Z"; }
我希望修改代码后,控制台只输出timeDetected的对应内容,像这样:
timeDetected = "2018-05-28T16:00:13Z"; timeDetected = "2018-05-28T16:00:18Z"; timeDetected = "2018-05-28T16:00:43Z";
卡在这里很久了,恳请帮忙解决。
解决方案
你需要把遍历到的item转换成DataSnapshot类型,然后通过Firebase快照的方法或字典访问来提取timeDetected的值。这里有两种简单的实现方式:
方式一:通过childSnapshot(forPath:)直接定位字段
for item in snapshot.children { // 将遍历到的元素转为DataSnapshot类型 guard let childSnapshot = item as? DataSnapshot else { continue } // 获取timeDetected对应的子快照 let timeSnapshot = childSnapshot.childSnapshot(forPath: "timeDetected") // 提取值并按要求格式输出 if let timeValue = timeSnapshot.value as? String { print("timeDetected = \"\(timeValue)\";") } }
方式二:通过value字典读取字段
for item in snapshot.children { guard let childSnapshot = item as? DataSnapshot else { continue } // 将快照的value转为字典类型 guard let childData = childSnapshot.value as? [String: Any] else { continue } // 从字典中取出timeDetected值 if let timeValue = childData["timeDetected"] as? String { print("timeDetected = \"\(timeValue)\";") } }
代码说明
- 第一步的类型转换很关键:
snapshot.children返回的是Any类型元素,必须转为DataSnapshot才能调用Firebase快照的专属方法。 - 两种方式都能实现需求:如果你的子节点结构固定,方式一更直接;如果需要同时处理多个字段,方式二的字典访问会更灵活。
内容的提问来源于stack exchange,提问作者paulgio
相关产品推荐
相关产品推荐

