在 Swift 的 firestore 文档中附加来自模型的地图数组
Appending array of map from model in firestore document in Swift
我正在尝试添加到 Firestore 中的地图数组并收到以下错误:
Terminating app due to uncaught exception 'FIRInvalidArgumentException', reason: 'Unsupported type: __SwiftValue'
这是我的模特Class:
struct StringModel: Identifiable, Codable, Equatable, Hashable {
var id = UUID()
var cross: Int
var mains: Int
var name: String
var date: Date
}
struct UserDataModel: Identifiable, Codable {
@DocumentID public var id: String?
var uid: String
var strings: [StringModel]?
}
我正在使用以下函数更新 firestore 中的值,但是它似乎不起作用并引发错误:
@Published var newString = StringModel(cross: 50, date: Timestamp(), mains: 50, name: "")
func addString() {
db.document(uidStr).updateData(["strings" : FieldValue.arrayUnion([newString])]) { err in
if let err = err{
print("\(err)")
}
}
}
Firestore 数据库
有什么想法可以解决这个问题吗?谢谢!
您不能将 Swift 对象附加到 Firestore 数组。您必须将 Swift 对象转换为 [String: Any]
对象。您可以将计算的 属性 添加到为您输出的模型中。
struct StringModel: Identifiable, Codable, Equatable, Hashable {
var id = UUID()
var cross: Int
var mains: Int
var name: String
var date: Date
var firestoreData: [String: Any] {
return [
"id": id,
"cross": cross,
"mains": mains,
"name": name,
"date": date
]
}
}
func addString() {
db.document(uidStr).updateData(["strings" : FieldValue.arrayUnion([newString.firestoreData])]) { err in
if let err = err{
print("\(err)")
}
}
}
我正在尝试添加到 Firestore 中的地图数组并收到以下错误:
Terminating app due to uncaught exception 'FIRInvalidArgumentException', reason: 'Unsupported type: __SwiftValue'
这是我的模特Class:
struct StringModel: Identifiable, Codable, Equatable, Hashable {
var id = UUID()
var cross: Int
var mains: Int
var name: String
var date: Date
}
struct UserDataModel: Identifiable, Codable {
@DocumentID public var id: String?
var uid: String
var strings: [StringModel]?
}
我正在使用以下函数更新 firestore 中的值,但是它似乎不起作用并引发错误:
@Published var newString = StringModel(cross: 50, date: Timestamp(), mains: 50, name: "")
func addString() {
db.document(uidStr).updateData(["strings" : FieldValue.arrayUnion([newString])]) { err in
if let err = err{
print("\(err)")
}
}
}
Firestore 数据库
有什么想法可以解决这个问题吗?谢谢!
您不能将 Swift 对象附加到 Firestore 数组。您必须将 Swift 对象转换为 [String: Any]
对象。您可以将计算的 属性 添加到为您输出的模型中。
struct StringModel: Identifiable, Codable, Equatable, Hashable {
var id = UUID()
var cross: Int
var mains: Int
var name: String
var date: Date
var firestoreData: [String: Any] {
return [
"id": id,
"cross": cross,
"mains": mains,
"name": name,
"date": date
]
}
}
func addString() {
db.document(uidStr).updateData(["strings" : FieldValue.arrayUnion([newString.firestoreData])]) { err in
if let err = err{
print("\(err)")
}
}
}