繁体   English   中英

Swift Firebase订购查询

[英]Swift Firebase ordering query

免责声明:我是编码和Firebase的新手。

我的JSON树如下所示:

      “MAIN LEAGUE“ : {
                “Team Alpha“ : {
                    "Team Score" : “50”,
                    "Total Time " : "02:22:05",
                    "Team Name" : “Team Alpha“,

                        },
                “Team Bravo“ : {
                    "Team Score" : “200”,
                    "Total Time" : "02:09:58",
                    "Team Name" : “Team Bravo“
                     },
                “Team Charlie“ : {
                    “Team Score“ : “150”,
                    "Total Time" : "02:16:50",
                    "Team Name" : “Team Charlie“
                        }
        }

我正在尝试查询数据库并提出一个新的表格视图,据此团队按最高的“团队得分”排名。

因此,尝试按此顺序显示:

" Team Bravo" : "200"
" Team Charlie" : "150"
" Team Alpha" : "50"

我有点迷路了。 我已经尝试了,但无济于事(下面的表格视图中什么也没有返回):

  struct content {
        var sTitle : String!
        var sValue : Any!

        init(sTitle: String, sValue: Any) {
            self.sTitle = sTitle
            self.sValue = sValue
        }
    }

    var dbHandleQuery: FIRDatabaseHandle?

    var dbrefString = (myDatabasePath)// this is the database path to the correct child 
     ("MAIN LEAGUE")

          dbHandleQuery=FIRDatabase.database().reference().child(dbrefString).queryOrdered(byChild: "Team Score").observe( .value, with: {(snapshot) in

   var newContent : [content] = []
            for snap in snapshot.children.allObjects as! [FIRDataSnapshot] {

                let title = snap.key as String
                let message = snap.value as? String
                print(snap.key)
                print(snap.value as Any)
                newContent.append(content(sTitle: title, sValue: message as Any))
                self.myTableView.reloadData()
            }
            self.cellContent = newContent
            self.myTableView.reloadData()
        })

我如何才能获得该排名? 还是最好尝试将所有内容加载到本地数组中,然后再从那里对它们进行排名? 任何帮助,不胜感激!

更新:上面的方法确实正确地对它们进行了排名,但是我的表只检索了“团队名称”,并且我无法提取“总分”以放入表视图单元格“第二个标签”(它有2个标签,“ 1个团队名称”,“ 1个总计”得分)。

所以现在看起来像这样:

" Team Bravo"
" Team Charlie"
" Team Alpha"

如何在每个分数旁边附加每个总分数? 非常感谢

好的,不确定这是否是最好的答案,但是我设法使其成功并获得了想要的结果。

发布它以帮助可能遇到相同问题的任何人:

    dbHandleQuery = FIRDatabase.database().reference().child(dbrefString).queryOrdered(byChild: "Team Score").observe( .value, with: {(snapshot) in
        var counter = 0
        var newContent : [content] = []
        for snap in snapshot.children.allObjects as! [FIRDataSnapshot] {

            counter += 1
            let title = snap.key as String
            if let rankedBy = snap.value as? [String : Any]  {

            newContent.append(content(sTitle: "\(counter).\(title)", sValue: rankedBy["Team Score"] as Any))
                self.myTableView.reloadData()
            }
        }
        self.cellContent = newContent
        self.myTableView.reloadData()
    })

这给我

"1.Team Bravo" - "200"
"2.Team Charlie" - "150"
"3.Team Alpha" - "50"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM