Swift -Firebase 如何知道 .childAdded 是不是为空?

Posted

技术标签:

【中文标题】Swift -Firebase 如何知道 .childAdded 是不是为空?【英文标题】:Swift -Firebase how to know if .childAdded is empty?Swift -Firebase 如何知道 .childAdded 是否为空? 【发布时间】:2019-11-27 20:31:01 【问题描述】:

我知道在使用.value 时,我可以使用.exists() 查看是否有任何内容

在这种情况下,我在 SearchController 中运行我的查询,我需要返回多个结果。有结果时一切正常,但如果没有结果我无从得知。

如何检查.childAdded 是否没有返回任何内容?

// if the user types in McDonalds and there are some then multiple will appear but if none then show a label that says “no results”

let searchText = searchController.searcchBar.text?.loweredCase() else  return 

Database.reference.child("restaurants")
    .queryOrdered(byChild:"restaurantName")
    .queryStarting(atValue: searchText)
    .queryEnding(atValue: searchText + “\uf8ff”)
    .observe( .childAdded, with:  (snapshot) in

          // no McDonalds appear so show a no results label
    )

【问题讨论】:

我很想知道为什么你需要在这里使用 .childAdded 而不是 .value? 我很久以前就创建了这个,我很高兴它对我的 mvp 有用。现在我想过渡到更强大的产品,一切都需要改进。 【参考方案1】:

由于.childAdded 仅针对与查询匹配的现有子节点触发,因此您无法使用它来检测何时没有匹配项。要检测是否没有匹配项,您需要使用.value 侦听器并检查snapshot.exists

除了现有的 .childAdded 侦听器之外,您还可以或者使用它(Firebase 客户端会在后台对请求进行重复数据删除,因此不会传输额外的数据, 您也可以使用.value 侦听器来处理结果。在后一种情况下,您需要loop over snapshot.children 才能访问各个结果节点。

【讨论】:

在后一种情况下,我需要使用 .observe 还是 .observeSingleEvent。我问是因为它似乎一次拉出所有符合结果的孩子 你应该使用你需要的东西。如果您想获取当前值和所有更改,请使用observe(就像您已经做过的那样)。如果您只想获取当前值,请使用observeSingleEvent 我会关注这个答案谢谢:***.com/a/38274936/4833705

以上是关于Swift -Firebase 如何知道 .childAdded 是不是为空?的主要内容,如果未能解决你的问题,请参考以下文章

无需重新分配变量即可展开 Swift 可选

SelectKBest with chi2 给出 ValueError: could not convert string to float

swift 3中的多选下拉菜单

想请问如何计算Chi-Square Tests

如何在 Swift 中知道 TapGestureRecognizer 的容器

Swift ios 重置视图控制器层次结构