【问题标题】:How can i get only keys from firebase?我怎样才能从firebase只获取密钥?
【发布时间】:2018-03-02 19:19:34
【问题描述】:

我有一个图像上的数据库结构,我需要在红色矩形中显示这个日期。我试图这样做,但它会引发错误,并且我在堆栈上找不到相同的问题。

我的数据库

reference.child("doc1").observe(.value, with: { (snapshot) in
            if snapshot.exists() {
                for date in (snapshot.value?.allKeys)
            }

【问题讨论】:

  • 错误是什么?
  • 问题出在转换中,应该转换为 Any?。我已经修复了它,像这样做: for date in ((snapshot.value as AnyObject).allKeys) { self.workDays.append(snapshot.value as!String) } print(self.workDays) 现在我得到了控制台中的错误:“无法将 '__NSDictionaryM' (0x11191f218) 类型的值转换为 'NSString' (0x110d5dd68)。”

标签: ios swift database firebase firebase-realtime-database


【解决方案1】:

您的结构是字典字典,因此您必须将 snap 转换为 [String:[String:Any]],其中键是您的“11dot...”,值包含所有小时

所以尝试使用这段代码:

guard let dict = snap.value as? [String:[String:Any]] else { return }
for (key, value) in dict {
    for (key2, value2) in value {
        print(key2, value2) // this print your hours
    }
}

无论如何,我建议您不要使用会读取所有子节点上发生的所有更改的observe(.value)。而是使用观察者的.childAdded 功能。

使用.childAdded,您一次只会收到一个子节点(如子节点上的 for),之后只会添加子节点:

Database.database().reference().child("doc1").observe(.childAdded) { (snap) in
    guard let dict = snap.value as? [String:Any]
    print(dict) // this print data contains on "11dot10" and so on  
}

【讨论】:

  • 守卫后需要一个else条件
  • 你是对的@leznevo100,已修复。无论如何,这对你有帮助吗?
  • 是的,但我认为在这里使用简单数组会更方便。反正thnx。
猜你喜欢
  • 2019-01-12
  • 2020-10-07
  • 2021-10-26
  • 1970-01-01
  • 2023-01-28
  • 2023-04-05
  • 1970-01-01
  • 2014-05-15
  • 2021-09-27
相关资源
最近更新 更多