如何仅观察 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 监听器来观察数据库的实时变化

如何提取firebase中的所有孩子,其中某些部分等于某个字符串

查询中的Firebase多个WHERE子句[重复]

如何使用 Firebase 中的 Glide 仅加载部分图像?