这是我在Firebase实时数据库中的结构:
我想为所有产品命名。
这是我尝试的内容:
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。
答案 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
代替了每次观察到的数据发生变化时产生回调。