Firebase Firestore - 在 Swift 的自定义对象中使用 ServerTimeStamp

the*_*ncs 1 firebase swift google-cloud-firestore

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

我想在我的对象上设置一个 serverTimestamp。我已阅读文档和看我能做到这一点是这样。文档说明我可以FieldValue.serverTimestamp()setDataupdateData调用中使用,并显示以下示例:

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

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

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)")
}
Run Code Online (Sandbox Code Playgroud)

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

  • 第一次创建数据时会设置一个 serverTimestamp
  • 获取数据时会将时间戳存储为我可以使用的日期。

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

public struct City: Codable {
    let name: String
    let createdAt: Date
}
Run Code Online (Sandbox Code Playgroud)

预先感谢您的帮助!

the*_*ncs 7

好的,我找到了答案:

public struct City: Codable {
    let name: String
    @ServerTimestamp var createdAt: Timestamp?
}
Run Code Online (Sandbox Code Playgroud)

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