【问题标题】:How to add an array to Firebase Firestore Swift如何将数组添加到 Firebase Firestore Swift
【发布时间】:2020-06-06 15:25:56
【问题描述】:
我正在尝试使用数组更新 Cloud Firestore 中文档中的数据,但是每当我尝试执行此操作时,我都会收到错误:由于未捕获的异常“FIRInvalidArgumentException”而终止应用程序,原因:“不支持的类型:__SwiftValue(找到在现场投票中)'。如果有人能帮助我理解我做错了什么以及如何解决这个问题,我将不胜感激。谢谢。代码如下。
数组更新代码-
db.collection("forum").document(data[0].id!).setData(["upvotes": data[0].upvotes!.remove(at: data[0].upvotes!.firstIndex(of: MainView.username ?? "Anonymous")!)])
【问题讨论】:
标签:
arrays
swift
firebase
google-cloud-firestore
【解决方案1】:
您必须将数组传递给 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,而且我的口味太费力了。