希望有人可以帮助我了解Firebase快照和排序。为什么如果在FirebaseDBRef上queryOrderedByChild,则snapshot.value将返回Firebase数据库(使用浏览器)上显示的内容,但如果执行for snap in snapshot.children{}
,则值会显示已排序。只想澄清为什么会发生这种情况。
让我举例说明。
let dinoRef = rootRef.child("dino")
let query = dinoRef.queryOrderedByChild("dimensions/height")
query.observeSingleEventOfType(.Value, withBlock: { snapshot in
// This prints to the console unsorted
print(snapshot.value)
// This prints to console sorted
for snap in snapshot.children {
print(snap)
}
})
谢谢。
答案 0 :(得分:3)
FIRDataSnapshot
包含有关返回数据的键,与这些键关联的值以及键的顺序的信息。当您调用snapshot.children
快照时,枚举器将按照您请求的顺序返回子项。
在快照上调用snapshot.value
时,它必须将所有信息转换为NSDictionary
。字典没有关于数据顺序的固有信息,因此此时结果的顺序会丢失。
答案 1 :(得分:0)
您必须尝试使用升序和降序选项的孩子。这将澄清你的疑问。