ios - Firebase 如何检查快照的子级本身是否属于 Datasnapshot 类型

标签 ios swift firebase firebase-realtime-database

如何检查子 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),打印语句被到达,因为有子项,但它们只是字典值。我想要它,这样就不会专门​​到达它,因为它下面没有任何数据快照。

例如。 1 子项是字典值且没有数据快照

-LojqctqkDpthbF_TYvP
  |
  |---"key1":"value1"
  |---"key2":"value2"
  |---"key3":"value3"

仅当存在像 eg 中那样的数据快照时,才应到达打印语句。 2 下面

例如。 2 子元素是字典值和 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_TYvPkey1key2key3

<小时/>

区别在于子 DataSnapshot 的值的类型。因此,如果您想知道某个 DataSnapshot 的值本身是否又是一个复杂类型,您可以执行类似针对每个子快照的操作:

snapshot?.value is Dictionary

或者,您可以检查每个子快照是否有子快照:

snapshot?.hasChildren()

对于 -LojqctqkDpthbF_TYvP ,上述测试均为 true,而对于其他键,它们将为 false。

关于ios - Firebase 如何检查快照的子级本身是否属于 Datasnapshot 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57937767/

相关文章:

ios - AWS IOT 连接在 IPAD OS v12.1.1 上关闭

ios - 'NSInvalidArgumentException',原因 : '-[UIPopoverController initWithContentViewController:] called when not running under UIUserInterfaceIdiomPad.'

ios - 电话号码的 Swift 2 国家代码

ios - Swift 核心图像在没有 CIFilter 的情况下对图像应用锐化

javascript - onCall 云函数返回 'Data cannot be encoded in JSON. NAN'

ios - 爸爸为 React Native 解析 CSV

swift - 如何删除与不存在的变量相关的控制台错误

ios - Xcode setNavigationBarHidden 向上移动 View

ios - 从 Fabric 链接到 Firebase 后,Firebase 控制台中未显示崩溃

firebase - 如何使用 flutter 在另一种状态下使用构造函数对象