swift - Firebase Firestore - 在 Swift 的自定义对象中使用 ServerTimeStamp
问题描述
我在我的项目中使用 Firebase Cloud Firestore,并创建了自定义对象来处理传入和传出数据。这非常适合我的需求——有一个例外。
我想在我的对象上设置一个 serverTimestamp。我已经阅读了文档,发现我可以这样做。文档说明我可以FieldValue.serverTimestamp()
在setData
andupdateData
调用中使用,并显示以下示例:
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
}
预先感谢您的帮助!
解决方案
好的,我找到了答案:
public struct City: Codable {
let name: String
@ServerTimestamp var createdAt: Timestamp?
}
在这里,当我调用时 createdAt 为零setData
。服务器将使用服务器值填充它,然后下次我从服务器获取数据时,它将填充写入的日期时间(并且永远不会被覆盖)
推荐阅读
- jquery - 打开用户点击的图片
- python - 在 python 模块中导入子模块时 PyImport_Import 失败
- javascript - CKEditor 4 有效,但 CKEditor 5 无效
- c# - 使用条件时如何从 TabbedPage 隐藏选项卡(xamarin 表单)
- python - 差异检查器,输入文件名而不是说明文件
- amazon-web-services - AWS Cognito 巴黎区域的替代方案
- wordpress - 如何使用 AFC 计算表中的行数 - 高级自定义字段中继器
- reactjs - 访问 React Dropzone 组件上的“名称”属性
- ruby - 乘法问题:除以相同的小数并乘以不返回原始数字
- ms-word - 如何禁用保存、另存为或 ctr+c unsing office-js