【问题标题】:How to only observe the last character in Firebase如何仅观察 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 返回的快照中包含的数据。

标签: swift firebase firebase-realtime-database


【解决方案1】:

无法查询或观察小于整个子节点的任何内容。即使该节点包含一个字符串子值,您每次都会读取整个字符串。

考虑改为将每个字符存储为不同的孩子,并与时间戳配对,并调整您的查询以仅检查具有最新时间戳的孩子。要重建整个字符串,只需读取所有子项并按时间戳顺序连接所有字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 2022-01-16
    • 2021-06-27
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    相关资源
    最近更新 更多