2017-07-28 118 views
1

我创建了JSON数据库树,我可以使用这些代码读取特定值。我可以看到表视图“阿尔伯特·爱因斯坦”获取Firebase列中的所有数据

ref.child("Personel").child("Name").observeSingleEvent(of: .value, with: { (snapshot) in 

      if let item = snapshot.value as? String{ 

       self.myList.append(item) 
       self.LessonsTableView.reloadData() 
      } 

     }) 

https://i.hizliresim.com/JlNEbj.png

不过,我想看看在个人专栏哪些类别?与此类似,

https://i.hizliresim.com/9dApPO.png

有没有什么办法让或了解其列在“个人”

表视图输出必须 - >年龄,姓名,照片

+0

有几件事:Firebase中没有列,只有父母和孩子对应的键和值。您正在问父节点*中存在哪些*子键。 (在你的例子中的键是年龄,名字和照片)。你可能想更新你的问题,所以它更清楚一点。这也是一个很好的问题。将来,请将您的Firebase结构包含为文本,无图片。这样,如果在答案中使用它,我们不必重新输入。 – Jay

回答

0

如果循环通过snapshot.value你应该能够从数据库中获得key

在JavaScript它会是这样的:

ref.child("Personel").child("Name").observeSingleEvent(of: .value, with: { (snapshot) in 

    if let item = snapshot.value as? String{ 

     self.myList.append(item) 
     self.LessonsTableView.reloadData() 
    } 

    var vals = snapshot.val(); 
    for(var property in vals) { 
     console.log(property); // property has those values in it 
    } 

}) 
+0

该代码将值附加到数组--OP需要快照中的KEYS,而不是值。 – Jay

+0

它确实返回KEYS – Levi

+0

如何? Snapshot.value返回快照中包含的*值*,而不是密钥。在这个答案中,该值被附加到myList数组中。但是,请注意您的答案中使用的是“名称”键,而OP不知道该键,因此也不起作用。 – Jay

0

这是一种方式:

ref.child("Personel").observeSingleEvent(of: .value, with: { (snapshot) in 
    self.myList.append(snapshot.childSnapshot(forPath: "Age").value) 
    self.myList.append(snapshot.childSnapshot(forPath: "Name").value) 
    self.myList.append(snapshot.childSnapshot(forPath: "Photo").value) 
    self.LessonsTableView.reloadData() 
}) 
+0

这只适用于钥匙已知的情况 - 他希望得到实际的钥匙,而不是价值;-) – Jay

+0

啊......那需要一个循环。我不想查找演员所需的咒语。但我看到你已经在你的答案中做到了。 :-D –

1

您可以通过快照进行迭代,得到它的孩子,然后将这些儿童键

假设您与用户有一个用户节点

users 
    user_0 
    fav_game: "WoW" 
    name: "Leroy" 

然后让名字的钥匙:和fav_game:

let userRef = self.ref.child("users").child("user_0") 
userRef.observeSingleEvent(of: .value, with: { snapshot in 
    for child in snapshot.children { 
     let snap = child as! DataSnapshot 
     let key = snap.key 
     print(key) 
    } 
}) 

打印

fav_game 
name 

一个重要的注意是

for child in snapshot.children 

,因为这将保持数据(在此按键情况)。如果快照被转储到字典中,它会失去命令。

相关问题