首页 > 解决方案 > Firebase Firestore - 在 Swift 的自定义对象中使用 ServerTimeStamp

问题描述

我在我的项目中使用 Firebase Cloud Firestore,并创建了自定义对象来处理传入和传出数据。这非常适合我的需求——有一个例外。

我想在我的对象上设置一个 serverTimestamp。我已经阅读了文档,发现我可以这样。文档说明我可以FieldValue.serverTimestamp()setDataandupdateData调用中使用,并显示以下示例:

db.collection("objects").document("some-id").updateData([
    "lastUpdated": FieldValue.serverTimestamp(),
]) { err in
    ...
}

但是,在我的代码中,我将自定义对象传递给这些函数,如下所示:

let city = City(name: "Los Angeles")
do {
    try db.collection("cities").document("LA").setData(from: city)
} catch let error {
    print("Error writing city to Firestore: \(error)")
}

所以,我想要的是向我的自定义类添加一个新属性,它将做两件事:

我需要对我的自定义类做些什么来实现这一点?

public struct City: Codable {
    let name: String
    let createdAt: Date
}

预先感谢您的帮助!

标签: swiftfirebasegoogle-cloud-firestore

解决方案


好的,我找到了答案:

public struct City: Codable {
    let name: String
    @ServerTimestamp var createdAt: Timestamp?
}

在这里,当我调用时 createdAt 为零setData。服务器将使用服务器值填充它,然后下次我从服务器获取数据时,它将填充写入的日期时间(并且永远不会被覆盖)


推荐阅读