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 是不是为空?的主要内容,如果未能解决你的问题,请参考以下文章
SelectKBest with chi2 给出 ValueError: could not convert string to float