You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

Firebase structure

嘿,我来帮你看看问题出在哪~

首先看你的代码逻辑:你嵌套了两次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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:18:58