当前位置: 首页 > 面试题库 >

如何快速创建负Firebase时间戳

桓修能
2023-03-14
问题内容

对于我正在开发的iOS应用,我需要按降序获取消息,即最新消息排在第一位,然后是第二最新消息,依此类推。

从其他SO答案和研究来看,看来我的情况最好的方法是创建一个否定的时间戳,然后将其保留到数据库中作为消息的额外属性。

然后,我将使用queryOrderedByChild('negativeTimestamp')来获取中的消息,然后使用observeSingleEventchildAdded观察器来处理在进行初始调用后发送的消息。

在firebase 文档中,它说我可以从此代码
firebase.database.ServerValue.TIMESTAMP中* 获取服务器时间戳值。 *

如何为Swift 3编写此代码?


问题答案:

首先,请参阅评论中的链接答案。该答案取决于客户端生成的时间戳记,该时间戳记为负数并写入Firebase。

如果您想让Firebase生成时间戳,也可以使用这种小巧的Firebase结构和代码来完成。

首先,让我们看一下结构

root
  parent_node
    -Y8j8a8jsjd0adas
       time_stamp: -1492030228007
  timestamp: 1492030228007

接下来,创建并使用该结构的一些代码:

定义一个可在我们的类中使用的变量,该变量引用Firebase时间戳

let kFirebaseServerValueTimestamp = [".sv":"timestamp"]

和一个将观察者添加到时间戳节点的函数:

func attachObserver() {

    let timestampRef = self.ref.child("timestamp")
    let parentNodeRef = self.ref.child("parent_node")
    var count = 0

    timestampRef.observe(.value, with: { snapshot in

        if snapshot.exists() {
            count += 1
            if count > 1 {
                let ts = snapshot.value as! Int
                let neg_ts = -ts
                let childNodeRef = parentNodeRef.childByAutoId()
                let childRef = childNodeRef.child("time_stamp")
                childRef.setValue(neg_ts)
                count = 0
            }
        }
    })

还有一个写入时间戳的函数,因此导致观察者触发,该事件根据Firebase时间戳在parent_node内创建子节点

func doTimestamp() {
    let timestampRef = self.ref.child("timestamp")
    timestampRef.setValue(kFirebaseServerValueTimestamp)
}

这是总结。

在attachObserver函数中,我们将观察者附加到时间戳节点-该节点可能存在或可能不存在,但如果不存在,将创建该节点-
继续阅读。每当时间戳节点中发生事件时,都会调用闭包中的代码。

调用doTimestamp函数时,它将创建时间戳并将其写入timestamp节点,然后触发我们附加在attachObserver中的观察者。

观察闭包中的代码执行以下操作:

确保快照中包含某些内容,如果包含,则增加一个计数器(稍等一下)。如果计数器大于1,则从快照获取时间戳作为整数。然后,创建它的底片,并将其作为parent_node的子代写回到Firebase。

无论何时您想使用Firebase生成的时间戳为子节点添加时间戳,但反向加载/排序的值为负,这将如何应用-这就是OP问题。

这里的陷阱是,当这种情况发生时

    timestampRef.setValue(kFirebaseServerValueTimestamp)

它实际上向节点写入两次,这将导致更近的代码被调用两次。

也许Firebaser可以解释这一点,但是我们需要忽略第一个事件并捕获第二个事件,这是实际的时间戳。

因此,第一个事件将使观察者更接近触发点,使count = 1,由于if语句而将其忽略。

然后触发第二个事件,其中包含实际时间戳记,这就是我们用来使否定并写到Firebase的原因。

希望这对OP和评论者有所帮助。



 类似资料:
  • 在firebase文档中,它说我可以从以下代码片段firebase.database.servervalue.timestamp中获得服务器时间戳值 我如何为Swift 3写这个?

  • 问题内容: 我想快速创建一个像这样的json: 如何创建此json? 问题答案: 创建您的对象,在这种情况下为字典: 从对象创建JSON数据: 如果需要,请使用JSON数据作为字符串:

  • 本文向大家介绍python如何快速生成时间戳,包括了python如何快速生成时间戳的使用技巧和注意事项,需要的朋友参考一下 结果是 知识点扩展: 获取秒级时间戳与毫秒级时间戳、微秒级时间戳 返回 获取当前日期时间 返回 到此这篇关于python如何快速生成时间戳的文章就介绍到这了,更多相关python生成时间戳的简单方法内容请搜索呐喊教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持呐喊教

  • 本文向大家介绍如何快速创建Android模拟器,包括了如何快速创建Android模拟器的使用技巧和注意事项,需要的朋友参考一下 调试手机应用程序一般先用模拟器来实现,只是因为每次都发布到手机上调试太麻烦了。当应用程序在模拟器上调试没错后,再发布到手机运行验证就行了。 一、模拟器创建方式 为了在模拟器中观察运行结果,创建Android应用程序前,需要先创建模拟器。有以下几种办法: 办法1:进入And

  • 问题内容: 我有一个日期保存在Firestore字段中作为时间戳,我想将其转换为Swift中的日期: 我尝试了以下操作,但出现错误: 错误: 我想转换为Date的原因是为了可以使用此Date扩展名模仿您在Instagram帖子上看到的时间戳: 问题答案: 可以这样做: 或者你可以这样做: 请参阅时间戳参考文档。

  • 创建并且编辑快速蒙版 要使用“快速蒙版”模式快速地创建并编辑选区,请从某个选区开始,然后从中添加或删减选区,以形成蒙版。也可以完全在“快速蒙版”模式下创建蒙版。受保护区域和未受保护区域以不同颜色进行区分。当离开“快速蒙版”模式时,未受保护区域成为选区。 注意:当在“快速蒙版”模式中工作时,“通道”面板中出现一个临时快速蒙版通道。但是,所有的蒙版编辑是在图像窗口中完成。 使用任一选区工具,选择要更改