Firebase排序对snapshot.value的澄清

时间:2016-08-19 04:31:01

标签: ios swift firebase firebase-realtime-database

希望有人可以帮助我了解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)
        }
    })

谢谢。

2 个答案:

答案 0 :(得分:3)

FIRDataSnapshot包含有关返回数据的键,与这些键关联的值以及键的顺序的信息。当您调用snapshot.children快照时,枚举器将按照您请求的顺序返回子项。

在快照上调用snapshot.value时,它必须将所有信息转换为NSDictionary。字典没有关于数据顺序的固有信息,因此此时结果的顺序会丢失。

答案 1 :(得分:0)

您必须尝试使用​​升序和降序选项的孩子。这将澄清你的疑问。