如何知道在 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 事件类型中更新了哪个子子项的主要内容,如果未能解决你的问题,请参考以下文章