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

Posted

技术标签:

【中文标题】在 SwiftUI 上的 Firebase 中使用 updateData 函数时出错【英文标题】:Error when using updateData function in Firebase on SwiftUI 【发布时间】:2020-06-29 11:25:22 【问题描述】:

我尝试使用 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")
        
    

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

使用updateData时,key必须是Strings。

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

【讨论】:

以上是关于在 SwiftUI 上的 Firebase 中使用 updateData 函数时出错的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI - 将存储中图像文件的路径移动到 Firebase 上的实时数据库 [重复]

如何使用 SwiftUI 更新 Firebase 中的集合?

无法使用 SwiftUI 从 Firebase / Firestore 中删除文档

在 SwiftUI 中使用 For 循环获取 Firebase 数据

SwiftUI Firebase - 在 Firebase 中添加或减去整数

使用 Firebase 的 Swiftui 中未显示数据