【问题标题】:Firebase Firestore - Using ServerTimeStamp in a Custom Object in SwiftFirebase Firestore - 在 Swift 的自定义对象中使用 ServerTimeStamp
【发布时间】:2021-02-28 12:28:46
【问题描述】:

我在我的项目中使用 Firebase Cloud Firestore,并创建了 Custom Objects 来处理传入和传出数据。这非常适合我的需求 - 除了一个例外。

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

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)")
}

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

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

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

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

提前感谢您的帮助!

【问题讨论】:

    标签: swift firebase google-cloud-firestore


    【解决方案1】:

    好的,我找到了答案:

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

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

    【讨论】:

      【解决方案2】:
      struct City: Codable {
          let createdAt: Double
          let nameCity: String
          init(name: String) {
             nameCity = name
             timestamp = FIRServerValue.timestamp()
              
          }
      }
      

      在此之后,您可以调用 City(name: "Los Angeles"),并会创建一个时间戳。

      【讨论】:

      • 我无法识别 FIRServerValue。
      • 否则你可以使用 Date().timeIntervalSince1970
      • 我在上面贴了正确的答案。无论如何感谢您的帮助。
      猜你喜欢
      • 2021-03-15
      • 2019-07-28
      • 2020-04-23
      • 2022-06-30
      • 1970-01-01
      • 1970-01-01
      • 2020-08-01
      • 2020-08-07
      • 1970-01-01
      相关资源
      最近更新 更多