所以我有一个像这样的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) })
当我使用2或3作为起点时,会得到此打印(此处为2):
2
3
可选({2 = uid2;})
我很容易将其投射到 Dictionary<String, AnyObject>
Dictionary<String, AnyObject>
但是,当我将其1用作起点时,会得到以下信息:
1
optional(<__ NSArrayM 0x6000000494b0>(,uid1))如果我尝试将其强制转换为Dictionary,它将得到 nil
nil
这是为什么?
我在论坛上问了同样的问题..
您应该避免在分布式系统中使用数组(特别是数字,顺序ID)。
有关Firebase如何处理类似数组的行为以及为什么应避免使用数组的更多信息:
它在旧的Firebase文档中明确定义了在Firebase中使用数组时发生的情况。检查firebase数据库中的数组
您还可以阅读“ 最佳实践:Firebase中的数组 ..”
如果所有键都是整数,并且0到对象中最大键之间的键中有一半以上具有非空值,则Firebase会将其呈现为数组。