[英]Firebase how to check if snapshot's children are of type Datasnapshot themselves
如何检查子LojqctqkDpthbF_TYvP
是否具有其他Datasnapshot
s而不是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语句,但它们只是dict值。 我希望它不会被明确达到,因为它下面没有任何Datasnapshots。
例如。 1个是dict值且没有数据快照的子级
-LojqctqkDpthbF_TYvP
|
|---"key1":"value1"
|---"key2":"value2"
|---"key3":"value3"
仅在有诸如例如的数据快照时,才可以到达print语句。 2以下
例如。 2个是dict值的子级和2个数据快照
-LojqctqkDpthbF_TYvP
|
|---"key1":"value1"
|---"key2":"value2"
|---"key3":"value3"
|
@-LlzB3_ppHHVmdipXs
|
@-LlzD8p5-WOT-ZZhfc
您使用的定义稍有偏差,这使其难以实现。
首先,我们为数据库中哪些数据成为客户端中的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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.