我正在开发一个应用程序,该应用程序记录用户何时停止滚动运动,将滚动的偏移量和经过的时间附加到本地数组,然后在用户关闭应用程序时将滚动历史记录上载到Firebase。
Firebase中的数据存储在顶部,并带有自动ID。然后,每个滚动偏移量和经过时间都存储在其父级下方的自己的自动ID子级中。在Firebase Web应用程序中,孩子的顺序正确。
我像这样从Firebase提取数据:
ghostref.queryOrderedByKey().queryLimited(toLast: UInt(1)).observe(.childAdded, with: { (snapshot) in
guard let ghostdict = snapshot.value as? [String:[String:String]] else {
print("failure")
return
}
var downloadedghostarray = [(cameray:Float, timeelapse:Double)]()
for key in ghostdict.keys {
downloadedghostarray.append((cameray: Float(ghostdict[key]!["cameray"]!)!, timeelapse: Double(ghostdict[key]!["timeelapse"]!)!))
}
}
当我获得所需的数据时,它的顺序不正确。有什么方法可以按预期顺序拉动Firebase子级?也许我也可以通过键命令快照的子级?
编辑:这是按所需顺序显示在Firebase Web应用程序中的数据:
这是使用上面的代码呈现的数组:
最佳答案
通过按关键字迭代节点字段并按关键字组织它们,可以有效地使列表中的元素随机化。基于哈希的字典/地图不保证顺序得到维护。
您将必须使用children迭代快照,(我相信)可以确保维持子级的顺序。此顺序应允许您将它们推入已确保顺序的另一个阵列中。
关于ios - 如何按顺序获取Firebase快照中的子级列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53845591/