首页 > 解决方案 > 如何将数组添加到 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")!)])

标签: arraysswiftfirebasegoogle-cloud-firestore

解决方案


您必须将数组传递给 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,而且我的口味有太多的力量展开。


推荐阅读