我如何检查子LojqctqkDpthbF_TYvP
是否有其他Datasnapshot
而不是k/v
对的子,如例如。 1 ?
我尝试了所有这些方法,但是都没有效果:
Database.database().reference().child("LojqctqkDpthbF_TYvP").observeSingleEvent(of: .value, with: { (snapshot) in
if !snapshot.hasChildren() { return }
guard snapshot.children.allObjects is [DataSnapshot] else { return }
guard let children = snapshot.children.allObjects as? [DataSnapshot] else { return }
print("this print statement should only get reached if there are Datasnapshots underneath of it")
})
在上面的代码中(来自下面的例如1 ),由于有子级,所以达到了print语句,但它们只是字典值。我想要它,以至于无法实现它,因为它下面没有任何Datasnapshots。
例如1 属于dict值且没有数据快照的子项
-LojqctqkDpthbF_TYvP
|
|---"key1":"value1"
|---"key2":"value2"
|---"key3":"value3"
仅当有像这样的数据快照时,才可以到达打印语句。 2 下方
例如2 个是dict值的孩子和2个Datasnapshot
-LojqctqkDpthbF_TYvP
|
|---"key1":"value1"
|---"key2":"value2"
|---"key3":"value3"
|
@-LlzB3_ppHHVmdipXs
|
@-LlzD8p5-WOT-ZZhfc
答案 0 :(得分:0)
您使用的定义稍有偏差,这使其难以实现。
首先让我们为数据库中的哪些数据在客户端中成为DataSnapshot
设置正确的定义:
假设您的数据库中有此JSON:
"-LojqctqkDpthbF_TYvP": {
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
如果将此JSON从数据库加载到应用程序中,则将获得一个具有密钥-LojqctqkDpthbF_TYvP
的单个顶级快照。此快照有三个子快照,每个子快照一个。这些键中的每个键的值都是原始字符串值的事实并不重要:它们仍然是每个DataSnapshot
。因此,在上面的JSON中,有四个快照,分别具有键-LojqctqkDpthbF_TYvP
,key1
,key2
和key3
。
区别在于子DataSnapshot
的值的类型。因此,如果您想知道他对某个特定DataSnapshot
的值本身是否又是复杂类型,则可以对每个子快照进行 :
snapshot?.value is Dictionary
或者,您可以检查每个子快照 是否有子:
snapshot?.hasChildren()
对于-LojqctqkDpthbF_TYvP
,上述测试都将为true,而对于其他键,它们将为false。