Firebase查询 – 我得到一些types的NSArray作为结果(有时只)

所以我有这样一个firebase数据库:

userIndexes -- 1: uid1 -- 2: uid2 -- 3: uid3 

我想通过使用密钥来获得uid。 所以我会这样查询它:

 DataService.sharedInstance.DB_REF_USERS_INDEXED_BY_ID.queryOrderedByKey().queryStarting(atValue: "2").queryLimited(toFirst: 1).observeSingleEvent(of: .value, with: { (snapshot) in print(snapshot.value) }) 

当我使用23作为起点,我得到这个打印(这里是2 ):

可选({2 = uid2;})

我可以很容易地把它转换成Dictionary<String, AnyObject>

但是当我用1作为起点的时候,我得到了这个:

可选(<__ NSArrayM 0x6000000494b0>(<null>,uid1))如果我试图将其转换为字典,它只是nil

这是为什么?

我在论坛上提出了同样的问题

您应该避免在分布式系统中使用数组(特别是数字,顺序标识符)。

有关如何在Firebase中处理类似数组的行为的更多信息,以及为什么您应该避免使用数组:

它明确地定义在旧的Firebase文档中,当您在Firebase中使用arrays时发生了什么。 检查Firebase数据库中的数组

您也可以通过Firebase中的最佳实践:arrays

如果所有的键都是整数,并且在对象中的0和最大键之间的键的一半以上都有非空值,那么Firebase将把它作为一个数组来呈现。