Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 筛选数据库子项并将每个名称作为字符串返回_Swift_Firebase_Firebase Realtime Database_Swift4 - Fatal编程技术网

Swift 筛选数据库子项并将每个名称作为字符串返回

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

我一直在使用Firebase实时数据库(通过CocoaPods)开发最新版本的Xcode和Swift应用程序,我遇到了一个大问题。我想筛选数据库的每个子级,只返回其中包含“user:cvb”的子级。我已经找到了一种过滤每个结果的方法,但在此之后,我希望将结果的同级作为一个字符串(我需要它是一个字符串,这样我就可以通过编程创建一个具有此名称的标签)

例:

让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"]
            // .. //
        }
    })