在firebase文档中,它说我可以从以下代码片段firebase.database.servervalue.timestamp中获得服务器时间戳值
我如何为Swift 3写这个?
首先,请参阅评论中的链接答案。这个答案依赖于客户端生成一个时间戳,该时间戳被设置为负值并写入Firebase。
如果您想让Firebase生成时间戳,也可以通过这个简短的Firebase结构和代码来完成。
首先,让我们看一看结构
root
parent_node
-Y8j8a8jsjd0adas
time_stamp: -1492030228007
timestamp: 1492030228007
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
}
}
})
func doTimestamp() {
let timestampRef = self.ref.child("timestamp")
timestampRef.setValue(kFirebaseServerValueTimestamp)
}
在attachObserver函数中,我们将一个观察者附加到时间戳节点--该节点可能存在,也可能不存在,但如果不存在,它将被创建--读下去。每当时间戳节点中发生事件时,闭包中的代码就会被调用。
当调用doTimestamp函数时,它创建时间戳并将其写入时间戳节点,然后该节点激发我们在AttachObServer中附加的观察者。
observe闭包中的代码执行以下操作:
timestampRef.setValue(kFirebaseServerValueTimestamp)
它实际上向节点写入两次,这将导致调用更接近中的代码两次。
也许Firebaser可以解释这一点,但我们需要忽略第一个事件并捕获第二个事件,这是实际的时间戳。
因此,第一个事件将使观察者更接近fire,使count=1,这将由于if语句而被忽略。
问题内容: 对于我正在开发的iOS应用,我需要按降序获取消息,即最新消息排在第一位,然后是第二最新消息,依此类推。 从其他SO答案和研究来看,看来我的情况最好的方法是创建一个否定的时间戳,然后将其保留到数据库中作为消息的额外属性。 然后,我将使用来获取中的消息,然后使用childAdded观察器来处理在进行初始调用后发送的消息。 在firebase 文档中,它说我可以从此代码段 firebase.
问题内容: 我一直在四处搜寻有关如何使用Swift 2.0为MapView制作MKCircle注释的良好解释,但我似乎找不到足够的解释。有人可以张贴一些示例代码来显示如何创建MKCircle批注吗?这是我用来制作地图并获取坐标的代码。 问题答案: 将展示有关如何使用xcode 8.3.3的swift 3在地图视图上创建圆形叠加层的分步方法 在您的主故事板文件中,将地图工具包视图拖到故事板的场景(视
问题内容: 我一直在努力在Swift中创建UIAlertView,但由于某种原因,由于出现此错误,我无法正确执行该语句: 找不到接受提供的参数的’init’的重载 这是我的写法: 然后调用它,我正在使用: 截至目前,它崩溃了,我似乎无法正确理解语法。 问题答案: 从班级: //不推荐使用UIAlertView。改用 UIAlertController 和UIAlertControllerStyle
我一直在Swift中创建一个UIAlertView,但由于某种原因,我无法得到正确的语句,因为我得到了以下错误: 找不到接受所提供参数的“init”的重载
问题内容: 我想暂时暂停我的应用。换句话说,我希望我的应用执行代码,但是在某个时候暂停4秒钟,然后继续执行其余的代码。我怎样才能做到这一点? 我正在使用Swift。 问题答案: 如果要从UI线程调用该方法,则可以考虑使用或调度计时器,而不是进行睡眠(这会锁定您的程序)。 但是,如果您确实需要延迟当前线程: 这使用UNIX中的功能。