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