Swift中如何获取Firebase自动生成密钥及索引?代码问题求助

嘿,我来帮你看看问题出在哪~
首先看你的代码逻辑:你嵌套了两次observe(.value)监听,第一次拿到的snapshot对应的是Message/senderId/receiverId这个节点,它的key就是你看到的10093(也就是receiverId的值),然后你又用这个key去访问同一个节点的子节点,这显然找错地方了——那些自动生成的密钥其实是receiverId节点下面的子节点,不是这个节点本身的key哦。
修正后的代码
你只需要一次监听,然后遍历目标节点下的所有子节点就能拿到每个自动生成的密钥,还能顺便获取索引:
databaseReference.child("Message").child(senderId).child(receiverId!).observe(.value, with: { snapshot in // 遍历子节点并带上索引 for (index, childItem) in snapshot.children.enumerated() { guard let childSnap = childItem as? DataSnapshot else { continue } print("索引:\(index),自动生成密钥:\(childSnap.key)") // 如果需要获取该密钥对应的消息内容,直接用childSnap.value // print("对应内容:\(childSnap.value ?? "无内容")") } })
为啥这样能行?
snapshot.children包含了receiverId节点下所有自动生成的子节点(就是你要的那些带随机密钥的节点)enumerated()会给每个子节点配上从0开始的索引,满足你要的索引需求- 如果不需要索引,直接遍历
snapshot.children就行:for childItem in snapshot.children { guard let childSnap = childItem as? DataSnapshot else { continue } print("自动生成密钥:\(childSnap.key)") }
之前的嵌套监听完全没必要,反而让你拿到了错误的key,现在调整后就能正确获取到你想要的内容啦~
内容的提问来源于stack exchange,提问作者Trung Nguyen
相关产品推荐
相关产品推荐

