arrays - 如何将数组添加到 Firebase Firestore Swift
问题描述
我正在尝试使用数组更新 Cloud Firestore 中文档中的数据,但是每当我尝试执行此操作时,我都会收到错误:由于未捕获的异常“FIRInvalidArgumentException”而终止应用程序,原因:“不支持的类型:__SwiftValue(在字段 upvotes 中找到) )'。如果有人能帮助我理解我做错了什么以及如何解决这个问题,我将不胜感激。谢谢。代码如下。
更新数组的代码-
db.collection("forum").document(data[0].id!).setData(["upvotes": data[0].upvotes!.remove(at: data[0].upvotes!.firstIndex(of: MainView.username ?? "Anonymous")!)])
解决方案
您必须将数组传递给 Firestore 才能更新数组属性。你正在做的是传递一个数组的元素。该remove(at:)
方法,当像这样使用时:
let removedElement = someArray.remove(at: someIndex)
将移除元素但返回移除元素的值;它不返回更新的数组。您必须首先删除元素,然后获取截断的数组:
someArray.remove(at: someIndex)
let updated = someArray
因此,首先删除,然后更新:
data[0].upvotes!.remove(at: data[0].upvotes!.firstIndex(of: MainView.username ?? "Anonymous")! // first remove
db.collection("forum").document(data[0].id!).setData([
"upvotes": data[0].upvotes!) // then pass
])
但是,我建议重新格式化代码,因为它读起来不太好,IMO,而且我的口味有太多的力量展开。
推荐阅读
- sonos - 尝试发送播放命令时收到“errorCode:ERROR_RESOURCE_GONE”
- flutter - 如何在颤振中添加真正的启动画面
- javascript - 如何访问数组对象并使用新创建的函数再次调用它们?使用有问题的代码示例
- java - 为什么我在提交 Fragment 后收到错误“getParentActivityIntent:badActivity name”?
- encryption - 尝试恢复密码但卡住 base64 编码?
- tensorflow - Spyder 无法在 conda 环境中加载 tensorflow,尽管 python 可以
- youtube - Windows 10 中的网络使用率永远不会超过 1%?
- ios - 如何从转义闭包中获取数据到 UICollectionview?
- gridview - 如何在 Kartik 的 GridView 中显示 RBAC 用户角色 - Yii2
- encryption - 从公钥获取 RSA 私钥