Swift 筛选数据库子项并将每个名称作为字符串返回
我一直在使用Firebase实时数据库(通过CocoaPods)开发最新版本的Xcode和Swift应用程序,我遇到了一个大问题。我想筛选数据库的每个子级,只返回其中包含“user:cvb”的子级。我已经找到了一种过滤每个结果的方法,但在此之后,我希望将结果的同级作为一个字符串(我需要它是一个字符串,这样我就可以通过编程创建一个具有此名称的标签) 例:Swift 筛选数据库子项并将每个名称作为字符串返回,swift,firebase,firebase-realtime-database,swift4,Swift,Firebase,Firebase Realtime Database,Swift4,我一直在使用Firebase实时数据库(通过CocoaPods)开发最新版本的Xcode和Swift应用程序,我遇到了一个大问题。我想筛选数据库的每个子级,只返回其中包含“user:cvb”的子级。我已经找到了一种过滤每个结果的方法,但在此之后,我希望将结果的同级作为一个字符串(我需要它是一个字符串,这样我就可以通过编程创建一个具有此名称的标签) 例: 让xPos=100 var yPos=100 让query=userRef.queryOrdered(byChild:“users”).quer
让xPos=100
var yPos=100
让query=userRef.queryOrdered(byChild:“users”).queryEqual(toValue:filters)
query.observe(.value,其中:{(快照)位于
对于snapshot.children中的childSnapshot{
打印(以字符串形式打印)
设labelNum=UILabel()
labelNum.text=childSnapshot as?字符串
labelNum.textAlignment=.center
labelNum.layer.borderWidth=1.0
labelNum.layer.borderColor=UIColor.lightGray.cgColor
让边界=UIScreen.main.bounds
让宽度=bounds.size.width
let split=“\(宽度/7)”.组件(以“.”分隔)
设七分之一=Int(拆分[0])??0
让一个盒子=七分之一
labelNum.frame=CGRect(x:xPos,y:yPos,宽度:oneBox,高度:oneBox)
self.view.addSubview(labelNum)
//标签内部不显示任何内容,只是空白框
yPos+=100
}
})
预期:框依次显示,其中包含name元素
发生的情况:框位置正确,但为空。我不确定代码中的
userRef
引用了哪个节点。我认为它必须引用事件
节点才能使查询正常工作
let eventsRef=dbRef.child(“用户”).child(“cvb”).child(“事件”)
一旦获得了对事件
节点的引用,问题就归结为仅从快照中提取数据snapshot.children
是一个n分子
对象,可用于迭代快照的所有子对象。事实上,子对象只是另一个DataSnapshot
对象。要从DataSnapshot
对象提取数据,请使用属性值
,该属性返回Any?
。然后,您可以将其强制转换为所需的类型(在您的示例中,[String:String]
)
谢谢,我忘了在问题中添加useref,但是在我的代码中有它,我只是觉得我没有在代码中使用它,所以我把它删掉了。谢谢你的回答,它是完美的,很快就会测试出来!
users
cvb
events
// This should be read and name: "abgdeze" returned as a String not Any
randomChildNameThatIWillNotKnow
name: "abgdeze"
users: "cvb"
thisShouldBeFilteredOut
name: "irrleveant"
users: "irrleveant"
let eventsRef = Database.database().reference().child("users").child("cvb").child("events")
let query = eventsRef.queryOrdered(byChild: "users").queryEqual(toValue: "cvb")
query.observe(.value, with: { (snapshot) in
for child in snapshot.children {
let childSnapshot = child as! DataSnapshot
let retrievedEvent = childSnapshot.value as! [String: String]
let name = retrievedEvent["name"]
let users = retrievedEvent["users"]
// .. //
}
})