如何循环访问Firebase数据

时间:2018-03-19 01:11:10

标签: ios swift firebase firebase-realtime-database

如何在Swift 4中循环实际是对象并访问其属性的Firebase数据(子)?

作为Swift的初学者,我试图遍历我从Firebase检索的数据,并且我正在尝试访问这些对象的属性。看起来要复杂得多,应该是迅速的(只是我的主观意见)

根据Firebase site的文档,这就是我所拥有的

_commentsRef.observe(.value) { snapshot in
    for child in snapshot.children {
        // Access to childs here ...
    }
}

现在,结合上面的内容和按照教程和解释(顺便说一句也找不到一个完全解释这个的内容)我在网上找到了,这就是我所拥有的:

ref.child("activities").child("list").observeSingleEvent(of: .value, with: { (snapshot) in
    // The list i got here is the list of the childs which are objects
    // Lets loop through that list and pull properties we need
    for child in snapshot.children.allObjects as! [DataSnapshot] {
        print(child.value)
    }
})

循环中的print将正确显示具有所有属性的对象,但我无法访问这些属性。 使用类似“child.value.title”的内容访问它会导致错误“类型值'任意'没有成员'标题'”

我是否需要将child.value转换为其他内容,或者将其转换为或以某种方式将其转换为属性可访问的JSON或类似的东西?

1 个答案:

答案 0 :(得分:1)

如果在包含多个属性的快照上调用value,则返回的是NSDictionary,其中属性名称为键。所以要获得你要做的title密钥的值:

for child in snapshot.children.allObjects as! [DataSnapshot] {
    print(child.value)
    let dict = child.value as? [String : AnyObject] ?? [:]
    print(dict["title"])
}

或者,您可以使用DataSnapshot的其他成员导航到title媒体资源,然后点击.value

for child in snapshot.children.allObjects as! [DataSnapshot] {
    print(child.value)
    print(child.childSnapshot(forPath: "title").value)
}

请参阅DataSnapshot.valuefirst sample in the Firebase documentation on reading data