上传对象数组 Firestore swift
Upload array of Objects Firestore swift
ich 使用 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 时,您使用字典值:
.updateData(["messages" : FieldValue.arrayUnion([messageModel.dictionary])]) { error in
ich 使用 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 时,您使用字典值:
.updateData(["messages" : FieldValue.arrayUnion([messageModel.dictionary])]) { error in