【发布时间】:2021-08-14 19:58:53
【问题描述】:
我花了几天时间研究这个问题,包括各种答案,例如:Firebase Firestore: Append/Remove items from document array 但无法弄清楚如何真正让它发挥作用。
我有两个结构:
struct TestList : Codable {
var title : String
var color: String
var number: Int
}
struct TestGroup: Codable {
var items: [TestList]
}
我可以使用FieldValue.arrayUnion添加数据:
@objc func addNewItem() {
let testList = TestList(title: "Testing", color: "blue", number: Int.random(in: 1..<999))
let docRef = FirestoreReferenceManager.simTest.document("abc")
docRef.updateData([
"items" : FieldValue.arrayUnion([["title":testList.title,
"color":testList.color,
"number":testList.number]])
])
}
上述工作如在 Firestore 仪表板中所反映的那样:
但是,如果我尝试删除数组中的一项,它就是行不通的。
@objc func removeItem() {
let docRef = FirestoreReferenceManager.simTest.document("abc")
docRef.getDocument { (document, error) in
do {
let retrievedTestGroup = try document?.data(as: TestGroup.self)
let retrievedTestItem = retrievedTestGroup?.items[1]
guard let itemToRemove = retrievedTestItem else { return }
docRef.updateData([
"items" : FieldValue.arrayUnion([["title" : itemToRemove.title,
"color" : itemToRemove.color,
"number" : itemToRemove.number]])
]) { error in
if let error = error {
print("error: \(error)")
} else {
print("successfully deleted")
}
}
} catch {
}
}
}
我已将itemToRemove 打印到日志中以检查它是否正确。但它只是不会将其从 Firestore 中删除。没有返回错误,但 "successfully deleted" 已记录。
请注意,上面是测试代码,因为我已经简化了我实际需要的测试代码,因为我无法让它工作。
关于我在这里做错了什么有什么想法吗?
【问题讨论】:
标签: swift google-cloud-firestore