基本上我在过去一周玩过Firebase,最近我偶然发现了查询订单,但是我最近发现了' queryOrderedByChild()'据我所知 - 允许您对firebase中的数据进行排序。但是,我似乎没有得到正确的结果。我的Firebase数据如下所示:
{
"names" : {
"-KHVUwXdVPHmrO_O5kil" : {
"id" : "0",
"name" : "Jeff"
},
"-KHVV7lCeac0cZNMi9fq" : {
"id" : "3",
"name" : "Stig"
},
"-KHVVCjXgl0XxasVOHF1" : {
"id" : "13",
"name" : "Ali"
},
"-KHVVJtyUO-yJZiompJO" : {
"id" : "7",
"name" : "Hannah"
},
"-KHVVR8tMSO1Oh7R8tR1" : {
"id" : "2",
"name" : "Amanda"
}
}
}
,我的代码如下:
ref.childByAppendingPath("names")
.queryOrderedByChild("id")
.observeEventType(.ChildAdded) { (snapshot:FDataSnapshot!) in
if let myID = snapshot.value["id"] as? String {
print(myID)
}
输出仍然是随机顺序,显示:0,2,7,1,8,4 - 这不应该是数字吗?我究竟做错了什么?我如何对其进行排序以使其数字升序或降序?
答案 0 :(得分:2)
您说您按号码排序,但id
属性的值存储为字符串。
由于您将它们存储为字符串,因此它们将在lexicographical order中返回。
如果您希望它们按数字顺序排列,则应将它们存储为数字
"-KHVUwXdVPHmrO_O5kil" : {
"id" : 0,
"name" : "Jeff"
},
或者,您可以将ID存储为零填充字符串:
{
"names" : {
"-KHVUwXdVPHmrO_O5kil" : {
"id" : "0000",
"name" : "Jeff"
},
"-KHVV7lCeac0cZNMi9fq" : {
"id" : "0003",
"name" : "Stig"
},
"-KHVVCjXgl0XxasVOHF1" : {
"id" : "0013",
"name" : "Ali"
},
"-KHVVJtyUO-yJZiompJO" : {
"id" : "0007",
"name" : "Hannah"
},
"-KHVVR8tMSO1Oh7R8tR1" : {
"id" : "0002",
"name" : "Amanda"
}
}
}
由于字符串的长度都相同,因此它们将按正确的顺序排序。但是你必须在后一个解决方案中决定字符串/最大id值的长度,所以看起来更糟。
答案 1 :(得分:0)
如果您按孩子使用订单,则需要订购ASTextInputAccessoryView
,否则您无法触及其价值。
那么也许你必须尝试像
这样的东西