如何仅观察 Firebase 中的最后一个字符
Posted
技术标签:
【中文标题】如何仅观察 Firebase 中的最后一个字符【英文标题】:How to only observe the last character in Firebase 【发布时间】:2019-11-02 15:07:50 【问题描述】:我是 firebase 新手,阅读了大部分 ios 文档,但找不到答案。我正在尝试构建一个应用程序,其中许多不同的用户可以在字符串末尾添加一个字母。我担心不断更新此内容会大量消耗资源,我希望找到一种方法来减少此问题。
let ref = Database.database().reference()
ref.observe(DataEventType.value) (snapshot) in
if !snapshot.exists() return
let book = snapshot.childSnapshot(forPath: "book").value
self.text.text = book as! String
根据我的阅读,听起来使用 .value 会查看整个子快照。我不知道 Firebase 实时数据库是否对于这样的事情不是最佳的,或者我只是错过了这个问题的明显解决方案。
我的最终目标是在设备上以某种形式下载整个字符串,唯一需要注意的是更新时字符串的最后一个字符。
【问题讨论】:
这个问题有点不清楚。您可以轻松地观察存储在 Firebase 中的字符串并收到任何更改的通知。例如,如果存储的字符串是 'abc' 并且 userA 向它添加了一个 'd' 所以它现在是 'abcd' 所有用户都将收到该更改的通知。然后 userB 向它添加一个“e”,因此字符串现在是“abcde”,所有用户也将收到该通知。你能澄清一下你想要做什么吗? 另外,听起来像使用 .value 会查看 - 您的问题中有两个 .value;DataEventType.value
和 .childSnapshot(forPath: "book").value
。两者都不会“看”任何东西。它们都返回指定 ref 处的所有数据 - 第一个访问实际的服务器 ref,而第二个访问从第一个 ref 返回的快照中包含的数据。
【参考方案1】:
无法查询或观察小于整个子节点的任何内容。即使该节点包含一个字符串子值,您每次都会读取整个字符串。
考虑改为将每个字符存储为不同的孩子,并与时间戳配对,并调整您的查询以仅检查具有最新时间戳的孩子。要重建整个字符串,只需读取所有子项并按时间戳顺序连接所有字符。
【讨论】:
以上是关于如何仅观察 Firebase 中的最后一个字符的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中的 Firebase 实时数据库观察方法中具有异步函数的 DispatchGroup
如何仅更改 javafx TextField 中最后一个字符的颜色
如何实现一个 Firebase 监听器来观察数据库的实时变化