ios - Firebase如何检查快照的孩子本身是否属于Datasnapshot类型
问题描述
我如何检查孩子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),由于有子项,但它们只是 dict 值,因此到达了 print 语句。我想要它,因为它下面没有任何Datasnapshots,所以它不会被专门访问。
例如。1是 dict 值且没有 Datasnapshots 的子项
-LojqctqkDpthbF_TYvP
|
|---"key1":"value1"
|---"key2":"value2"
|---"key3":"value3"
只有在有数据快照的情况下才能到达打印语句,例如。2以下
例如。2 个作为 dict 值的子项和 2 个数据快照
-LojqctqkDpthbF_TYvP
|
|---"key1":"value1"
|---"key2":"value2"
|---"key3":"value3"
|
@-LlzB3_ppHHVmdipXs
|
@-LlzD8p5-WOT-ZZhfc
解决方案
您正在使用稍微偏离的定义,这使得它难以实现。
让我们首先正确定义数据库中的哪些数据在DataSnapshot
客户端中变为a:
假设您在数据库中有这个 JSON:
"-LojqctqkDpthbF_TYvP": {
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
如果您将此 JSON 从数据库加载到应用程序中,您将获得一个带有 key 的顶级快照-LojqctqkDpthbF_TYvP
。此快照具有三个子快照,每个子快照对应其下的每个键。这些键中的每一个的值都是原始字符串值这一事实并不重要:它们仍然是每个 a DataSnapshot
。所以在上面的 JSON 中有四个快照,键-LojqctqkDpthbF_TYvP
为 、key1
、key2
和key3
。
区别在于 childDataSnapshot
的值的类型。因此,如果您想知道某个DataSnapshot
值本身是否又是一个复杂类型,您可以为每个子快照执行类似操作:
snapshot?.value is Dictionary
或者,您可以检查每个子快照是否有子快照:
snapshot?.hasChildren()
对于-LojqctqkDpthbF_TYvP
上述测试,它们都将为真,而对于其他键,它们将为假。
推荐阅读
- gitlab - 我们可以在 Gitlab 中拥有动态合并请求模板吗?
- php - 为什么我收到此 mbstring 扩展丢失错误
- ios - 无法从 Android Studio 为模拟器构建应用程序
- keras - 如何获得 keras-saved-model 的权重
- r - 将 R 与 Google Colaboratory 结合使用
- spring - 无法在 Spring Boot 上加入两个表
- google-cloud-platform - 如何在 GCP 中使用“compute@developer.gserviceaccount.com”类型的服务帐户创建 kubernetes 集群?
- javascript - DataTable 导出带图像的表格数据(PDF、Excel 和 csv)
- c# - 编写 UnityWebRequest.Post 的问题
- android - Delphi TListView DynamicApperance 适用于 Windows,但不适用于 Android