Swift 如何从firebase实时数据库读取数据

Swift 如何从firebase实时数据库读取数据,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,如何从Firebase数据库读取数据? 我有实时firebase数据库和以下json文件 { "Category" : { "Breakfast" : { "CategoryImg" : "Breakfast-img", "CategoryName" : "Breakfast" }, "Gluten-Free" : { "CategoryImg" : "Gluten-free-img", "CategoryName" :

如何从Firebase数据库读取数据? 我有实时firebase数据库和以下json文件

{
  "Category" : {
    "Breakfast" : {
      "CategoryImg" : "Breakfast-img",
      "CategoryName" : "Breakfast"
    },
    "Gluten-Free" : {
      "CategoryImg" : "Gluten-free-img",
      "CategoryName" : "Gluten-free"
    },
    "Lunch" : {
      "CategoryImg" : "Lunch-img",
      "CategoryName" : "Lunch"
    },
    "Popular" : {
      "CategoryImg" : "Popular-img",
      "CategoryName" : "Popular"
    },
    "Trending" : {
      "CategoryImg" : "Trending-img",
      "CategoryName" : "Trending"
    },
    "Vegetarian" : {
      "CategoryImg" : "Vegetarian-img",
      "CategoryName" : "Vegetarian"
    }
  }
}
我正在使用此代码检索详细信息

// 1
let rootRef = Database.database().reference()

// 2
let childRef = Database.database().reference(withPath: "Category")

// 3
let itemsRef = rootRef.child("Category")

// 4
let breakfastRef = itemsRef.child("Breakfast")

// 5
print(rootRef.key)
print(childRef.key)
print(itemsRef.key)
print(breakfastRef.key)
但我在控制台中得到了以下信息。有人能帮忙吗

nil
Optional("Category")
Optional("Category")
Optional("Breakfast")
我正在学习本教程,但我无法获得相同的结果

下面的代码在代码中说明了它将打印什么:

不可能(或者至少对我来说不可行)说出结果不同的原因。这可能是SDK行为的改变,也可能是Swift行为的改变,但同样的,这篇文章在显示输出时也有一些自由,将重点放在了它的Firebase方面,而不是Swift方面

但是,让我们重点讨论这些差异,以及如何在应用程序中处理它们

区别在于:

  • 第一个
    print(rootRef.key)
    为您打印
    nil
    ,同时根据教程打印
    “”

    虽然Swift SDK的Firebase文档没有具体说明根的键,但Android SDK的文档说明了以下内容:

    此快照的源位置的键名,如果此快照指向数据库根目录,则为空

    我很快进行了测试,JavaScript和Android SDK确实也打印了
    null

    换句话说:您看到的行为是预期的:因为您正在打印数据库根的键,所以值是
    nil
    /
    null

  • 您的其他按键打印为
    可选()
    ,而本教程仅打印

    这也是预期的行为。由于(如第一个print语句所示)键可以是
    nil
    或值,因此它的类型是
    可选的
    。当您打印可选字符串时,Swift将其打印为
    nil
    (如第一行所示)或
    optional()

    如果您只想像本教程中那样打印值,您可以使用
    print(childRef.key!)
    (如果您确定键不指向根),或者
    print(rootRef.key??“nil”)

    有关打印选项的详细信息,请参阅


您的代码完全符合预期。您希望打印什么?@GalotorResessvilla我想打印firebase数据库中的类别图像和类别名称,那么您不应该打印密钥。您应该使用
从firebase检索数据。观察
并打印快照。或者更好的办法是,把它放到字典里打印出来。本教程实际上演示了如何执行此操作。我正在尝试打印CategoryImg字段的值。我已经做了以下
打印(breakfastRef.value(forKey:“CategoryImg”)
,但没有运气。应用程序崩溃。我猜
print(childRef.key!)
没有正确地从数据库检索数据。
// 5
print(rootRef.key)   // prints: ""
print(childRef.key)  // prints: "grocery-items"
print(itemsRef.key)  // prints: "grocery-items"
print(milkRef.key)   // prints: "milk"