【问题标题】:Firebase dictionary return nil when clearly has Data当明确有数据时,Firebase 字典返回 nil
【发布时间】:2016-11-20 20:50:40
【问题描述】:

这是我的数据库结构:

orders_Placed {
  orderID {"date":...etc}
} 

我正在尝试检索所有订单,但 dictionary.value 为 nil,尽管打印时的字典清楚地包含数据。

代码:

ref.child("orders_Placed").observe(.childAdded, with: { snapshot in

    if let tes = snapshot.value as? Dictionary<String, AnyObject> {
        print("snapshot dictionarty is snapshot \(tes.reversed())")
        for t in tes {
            print("\nsnapshot dictionarty name snapshot \(t.value["date"])") //*1

            print("\nsnapshot dictionarty name key T IS \(t)") //*2
        }}

输出:

snapshot dictionarty name snapshot nil //*1

snapshot dictionarty name key T IS ("date", 1479580695307) //*2 clearly has data but for some reason returns nil?

【问题讨论】:

    标签: swift firebase-realtime-database


    【解决方案1】:

    你使用的for循环t实际上是一个(key: String, value: AnyObject)类型的元组。要访问实际的keyvalue,您只需分别执行t.keyt.value。无需再将字符串 key 传递给它,因为 t 不是字典。

    for t in tes
    {
      var currentDateKey = t.key // the key associated to the date
      var currentDate = t.value // extracts the exact value
    }
    

    【讨论】:

    • 哦,你知道为什么它是元组而不是字典吗?让我困惑的是我在不同的地方使用了这段代码(在我重组数据库之前),它返回了一个字典,这更容易,因为它允许我在一个循环中提取所有数据而不是这个。
    • 它是一个元组,因为你正在遍历字典。就像你有一个整数数组一样。迭代它会给你实际的整数。当你遍历字典时;因为它是一个键/值对,它由两个属性组成,最好表示为一个元组。如果你想将它作为字典访问,那么摆脱 for 循环。我发布了一个关于这个的答案 --> @ 987654321@overflow.com/a/39862631
    • 谢谢你,emil,你真的帮我省了好几个小时的头痛。
    猜你喜欢
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2019-03-10
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    相关资源
    最近更新 更多