[英]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.