簡體   English   中英

Swift:如何在 document().setData() Firestore 數據庫中使用 FieldValue.serverTimestamp()?

[英]Swift: How to use FieldValue.serverTimestamp() in document().setData() Firestore database?

我想要做的就是在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問題,所以我嘗試將其轉換為ServerTimestampTimestamp ,我得到了Cannot convert value of type 'FieldValue' to type 'Timestamp' in coercion

它在 Android 中運行良好,只需執行以下操作:

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

最好的,塞巴斯蒂安

問題是我使用setData(from:)而不是簡單地使用setData()

改變這個

.setData(from: ["first": FieldValue.serverTimestamp(), "second": dataStringArray])

對此

.setData(["first": FieldValue.serverTimestamp(), "second": dataStringArray])

完全解決了我的問題。

看來我正在嘗試使用旨在簡化制作自定義對象的擴展,但由於某種原因它沒有添加到文檔中。 我用錯了,因為我試圖像文檔中的那樣使用它。

這個 StackOverflow Question 解釋了更多關於這個問題的信息。 嘗試在 Cloud Firestore ios API 中調用 setData(from: ) 時出錯。 我該如何解決?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM