在SwiftUI上的Firebase中使用updateData函数时出错

时间:2020-06-29 11:25:22

标签: swift firebase google-cloud-firestore swiftui

我试图使用updateData(fields:[AnyHashable:Any])函数来更新文档中的数组。一段时间后,我遇到了一个我无法解决的非常奇怪的错误,它工作正常,这是错误消息:

global function '__designTimeString(_:fallback:)' requires that 'AnyHashable' conform to 'ExpressibleByStringLiteral'

----------------------------------------

CompileDylibError: Failed to build Data.swift

Compiling failed: global function '__designTimeString(_:fallback:)' requires that 'AnyHashable' conform to 'ExpressibleByStringLiteral'

Data.swift:115:17: error: global function '__designTimeString(_:fallback:)' requires that 'AnyHashable' conform to 'ExpressibleByStringLiteral'
                __designTimeString("#64647.[4].[6].[3].modifier[2].arg[0].value.[0].key.[0].value", fallback: "reviews"): FieldValue.arrayUnion([id])
                ^
SwiftUI.__designTimeString:1:13: note: where 'T' = 'AnyHashable'
public func __designTimeString<T>(_ key: String, fallback: T) -> T where T : ExpressibleByStringLiteral

我一直在环顾四周,但实际上找不到有关此类错误的详细信息,请帮助:(

这是我的代码中导致此错误的部分:

db.collection("restaurants").document(restaurantId).updateData([
     "reviews": FieldValue.arrayUnion([id])
     ]) { err in
        if let err = err {
            print("Error updating document: \(err)")
        } else {
            print("Document successfully updated")
        }
    }

2 个答案:

答案 0 :(得分:0)

我相信您的错误是在FieldValue.arrayUnion([id])部分产生的。如Firestore documentation for adding data with Swift所示,该字段必须加引号,因此您可以替换:

"reviews": FieldValue.arrayUnion([id])

"reviews": FieldValue.arrayUnion(["id"])

答案 1 :(得分:0)

使用updateData时,键需要为String s。

您是否考虑过使用Codable?导入FirebaseFirestoreSwift,然后使用db.collection("restaurants").addDocument(from: review)保存数据。此处有更多详细信息:SwiftUI: Mapping Firestore Documents using Swift Codable