一尘不染

Firebase查询-我得到某种类型的NSArray作为结果(仅有时)

swift

所以我有一个像这样的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用作起点时,会得到以下信息:

optional(<__ NSArrayM
0x6000000494b0>(,uid1))如果我尝试将其强制转换为Dictionary,它将得到 nil

这是为什么?


阅读 220

收藏
2020-07-07

共1个答案

一尘不染

我在论坛上问了同样的问题..

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

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

它在旧的Firebase文档中明确定义了在Firebase中使用数组时发生的情况。检查firebase数据库中的数组

您还可以阅读“ 最佳实践:Firebase中的数组 ..”

如果所有键都是整数,并且0到对象中最大键之间的键中有一半以上具有非空值,则Firebase会将其呈现为数组。

2020-07-07