如何在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或类似的东西?
答案 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.value和first sample in the Firebase documentation on reading data。