在Firebase中迭代一个孩子的所有键

时间:2017-04-09 18:51:11

标签: ios swift firebase firebase-realtime-database

这是我在Firebase实时数据库中的结构:

enter image description here

我想为所有产品命名。

这是我尝试的内容:

database.child("customerID").child("productTopSeller").observe(FIRDataEventType.value, with: { (snapshot) in
  for childSnap in snapshot.children.allObjects {
    let product = childSnap as! FIRDataSnapshot
    print(product.value?["name"] as? String ?? "")
  }
}) { (error) in
  print(error.localizedDescription)
}

但这会产生以下错误:

Type 'Any' has no subscript members.

我知道我需要以某种方式投射快照,但无法弄清楚如何做到这一点。使用Swift 3。

1 个答案:

答案 0 :(得分:2)

您需要将product.value投射到[String:Any]。请查看以下代码

ref.child("customerID").child("productTopSeller").observeSingleEvent(of: .value, with: { snapshot in
  let names = snapshot
      .children
      .flatMap { $0 as? FIRDataSnapshot }
      .flatMap { $0.value as? [String:Any] }
      .flatMap { $0["name"] as? String }

  print(names)    
})
  

请注意我使用observeSingleEvent只能从Firebase获得一次回调。   您的代码确实使用observe代替了每次观察到的数据发生变化时产生回调