簡體   English   中英

上傳對象 Firestore 數組 swift

[英]Upload array of Objects Firestore swift

我與 swift 和 firestore 一起工作,並嘗試實現與此類似的服務器:

    chatId: String
    eventCreatorId: String
    matchedUserId: String
    eventId: String
    messages: [
    {userId: String, timestamp:timestamp, messageText: String},
    {userId: String, timestamp:timestamp, messageText: String},
  ],

換句話說,使用 MVVM 設計我想上傳一個模型數組,但是當我嘗試使用這個時出現類型錯誤

struct ChatModel: Codable {
    var chatId: String
    var eventCreatorId: String
    var matchedUserId: String
    var eventId: String
    var messages: [MessageModel]

}

struct MessageModel: Codable {
    var userId: String
    var timeStamp: Timestamp
    var messageText: String
    
}

如果我嘗試上傳會發生錯誤

    func uploadMessage(messageText: String, chatId: String) -> Promise<Void> {
        return Promise { seal in
            guard let currentUser = Auth.auth().currentUser else {
                return
            }
            let timeStamp: Timestamp = Timestamp(date: Date())
            let messageModel = MessageModel(userId: currentUser.uid,timestamp: timeStamp, messageText: messageText)
            print(messageModel)
                let _ = db.collection("chats")
                    .document(chatId)
                    .updateData(["messages" : FieldValue.arrayUnion([messageModel])]) { error in
                        if let error = error {
                            seal.reject(error)
                        } else {
                            seal.fulfill(())
                        }
                    }
            }
        }
        
    }

我也試過沒有時間戳但遇到了同樣的錯誤

有人可以解釋一下我在做什么錯嗎?

在 ArrayUnion 上,Firestore 不了解您要傳遞的類型。 將結構轉換為類型為 [String: Any] 的字典將忽略此錯誤 -

struct MessageModel: Codable {
    var userId: String
    var timeStamp: Timestamp
    var messageText: String
    
    var dictionary: [String: Any] {
        return["userId": userId,
               "timeStamp": timeStamp,
               "messageText": messageText]
    }
}

然后,當您上傳到 Firestore 時,您使用 Dict 值:

 .updateData(["messages" : FieldValue.arrayUnion([messageModel.dictionary])]) { error in

暫無
暫無

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

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