如何知道在 swift 4 中实时 Firebase 的 childChanged 事件类型中更新了哪个子子项

Posted

技术标签:

【中文标题】如何知道在 swift 4 中实时 Firebase 的 childChanged 事件类型中更新了哪个子子项【英文标题】:How to know which subchild is updated in childChanged eventtype of realtime firebase in swift 4 【发布时间】:2019-02-23 12:30:48 【问题描述】:

假设我的 Firebase 实时数据库有子名称用户,它还有子子名称,例如“christianLiz@gmail.com”这样的电子邮件,子子电子邮件进一步有子名称,称为姓名、年龄和国家。

我在 child 上添加了一个 observeEvent 改变了 sn-ps 看起来像这样。

 ref.child("USERS").child("christianLiz@gmail,com").observe(.childChanged, with:  snapshot in

        if snapshot.exists()
            let value = snapshot.value as? NSDictionary
            if value!["name"] != nil
                print("here")
            else
                print("not here")
            

    ) (error) in
        print("")
    

当我在更改国家/地区的值后进行测试时,应用程序崩溃并且原因是这个值![“名称”]。现在我知道 childChanged 事件仅返回在我的测试场景“国家”中更改的孩子,因此其他值不在快照中,但我想检查哪个是更新的名称或年龄或国家。我该如何修改上面的代码来实现这一点。

【问题讨论】:

附带说明,您可能需要重新考虑使用电子邮件地址作为节点名称。如果电子邮件地址发生变化会怎样?您不仅需要使用新的电子邮件地址读入、删除和写出一个新节点(请记住 - 节点密钥不能更改),您还必须在 引用此节点的每个节点上执行此操作我>。使用 .childByAutoId 创建您的节点名称。此外,您也不必为特殊字符解析电子邮件地址。 【参考方案1】:

使用hasChild 检查孩子是否存在:

if snapshot.hasChild("country")
      print("found")
     else 
      print("not found")

【讨论】:

以上是关于如何知道在 swift 4 中实时 Firebase 的 childChanged 事件类型中更新了哪个子子项的主要内容,如果未能解决你的问题,请参考以下文章

这是如何在 swift 4 中实现的?

mailcore2如何在swift中实现它

如何在 Swift 中实现单例类

如何在 inputAccessoryView [Swift] 中实现滚动视图

如何在 Swift 中实现全球化?

在 Firebase 实时数据库中实现用户名(swift 4)