我只想在setData()
中设置一个Firebase服务器时间戳,但我似乎不知道如何让它工作。
以下是我尝试过的:
for document in snapshot!.documents {
do {
try document.reference.collection("Data").document()
.setData(from: ["first" : FieldValue.serverTimestamp(), "second" : dataStringArray])
print("Data successfully written to firestore.")
} catch let error {
print("Error writing data to firestore: (error)")
}
}
其目的是在每次写入数据时将serverTimestamp设置为字段,以获取数据写入的历史记录。
它一直显示错误Type of expression is ambiguous without more context
,所以我试图通过将其转换为FieldValue
来给它一些上下文,但随后我得到了相同的ambiguous without more context
问题,所以我尝试将其转换成ServerTimestamp
或Timestamp
,然后得到Cannot convert value of type 'FieldValue' to type 'Timestamp' in coercion
。
简单地做到这一点在安卓系统中效果很好:
document.reference.collection("Data").document().set(FieldValue.serverTimestamp() to formattedDataList)
但由于某种原因,它在Swift中不起作用。我已经搜索了几个小时,试图理解这个问题,但一直找不到一个好的解释。
我也试过这个:
setData(from: [FieldValue.serverTimestamp() : dataStringArray])
但我得到Error writing data to firestore: invalidValue([<FSTServerTimestampFieldValue: 0x280412de0>:
实际上我想写一条注释,但由于无法添加代码片段的限制,它成为了一个答案。如果这不是真正适合你的答案,请原谅我。
在我的应用程序中的聊天中,我使用Date作为sendDate(请参阅下面代码中的示例(,这不是你的一个选项吗?
func addNewChatMessageFromData( _ id: String,
_ chatId: String,
_ messageText: String,
_ messageType: String,
_ usersIds: [String],
_ senderId: String,
_ senderName: String,
_ lastSenderImageLink: String,
_ sendDate: Date
) {
do {
let chatMessageRef = db.collection("chatMessages").document().documentID
let newChatMessage = ChatMessageFB(chatMessageRef, chatId, messageText, messageType, usersIds, senderId, senderName, lastSenderImageLink, sendDate)
try db.collection("chatMessages").document(chatMessageRef).setData(from: newChatMessage) { _ in
print("Successful writing ChatMessage to Firestore")
}
} catch let error {
print("Error writing ChatMessage to Firestore: (error)")
}
}
最佳,Sebastian
问题是我使用的是setData(from:)
,而不是简单地使用setData()
更改此
.setData(from: ["first" : FieldValue.serverTimestamp(), "second" : dataStringArray])
到这个
.setData(["first" : FieldValue.serverTimestamp(), "second" : dataStringArray])
完全解决了我的问题。
我似乎试图使用一个扩展来简化定制对象的制作,但由于某种原因,它没有添加到文档中。我用错了,因为我试图像文档中那样使用它。
这个StackOverflow问题进一步解释了这个问题。尝试调用Cloud Firestore ios API中的setData(from:(时出错。我该怎么修?