【发布时间】:2020-08-26 14:54:29
【问题描述】:
我正在使用列表来显示用户通过表单输入的伤害数据,该表单已成功添加到 Cloud Firestore。我现在想添加一个删除功能,删除列表中选择的伤害。
这是我的Injury结构:
import SwiftUI
import FirebaseFirestoreSwift
struct Injury: Identifiable, Codable {
@DocumentID var id: String? = UUID().uuidString
var userId: String?
var specificLocation: String
var comment: String
var active: Bool
var injuryDate: Date
var exercises: String
var activity: String
var location: String
}
我的InjuriesViewModel:
import SwiftUI
import Firebase
import FirebaseFirestore
import FirebaseFirestoreSwift
class InjuriesViewModel: ObservableObject {
@Published var injuries = [Injury]()
private var db = Firestore.firestore()
func fetchData () {
let userId = Auth.auth().currentUser?.uid
db.collection("injuries")
.order(by: "injuryDate", descending: true)
.whereField("userId", isEqualTo: userId)
.addSnapshotListener{ (querySnapshot, error) in
guard let documents = querySnapshot?.documents else {
print("no documents")
return
}
self.injuries = documents.compactMap { (queryDocumentSnapshot) -> Injury? in
return try? queryDocumentSnapshot.data(as: Injury.self)
}
}
}
}
我的InjuryViewModel(这里是添加和删除伤害功能的地方,但是我不知道如何填写文档字段):
import SwiftUI
import Firebase
class InjuryViewModel: ObservableObject {
@Published var injury: Injury = Injury(id: "", userId: "", specificLocation: "", comment:
"", active: false, injuryDate: Date(), exercises: "", activity: "", location: "")
private var db = Firestore.firestore()
func addInjury(injury: Injury) {
do {
var addedInjury = injury
addedInjury.userId = Auth.auth().currentUser?.uid
let _ = try db .collection("injuries").addDocument(from: addedInjury)
}
catch {
print(error)
}
}
func deleteInjury(injury: Injury) {
db.collection("injury").document(??).delete() { err in
if let err = err {
print("Error removing document: \(err)")
}
else {
print("Document successfully removed!")
}
}
}
func save () {
addInjury(injury: injury)
}
func delete () {
deleteInjury(injury: injury)
}
}
提前感谢您的帮助!
这是我所在的位置:
func addInjury(injury: Injury) {
do {
var addedInjury = injury
addedInjury.userId = Auth.auth().currentUser?.uid
let documentRef = try db.collection("injuries").addDocument(from: addedInjury)
addedInjury.id = documentRef.documentID
print(documentRef.documentID)
}
catch {
print(error)
}
}
func deleteInjury(injury: Injury) {
db.collection("injuries").document(injury.id!).delete() { err in
if let err = err {
print("Error removing document: \(err)")
}
else {
print("Document successfully removed!")
}
}
}
【问题讨论】:
-
如果您不知道文档 ID,您将无法删除该文档。您要么必须在调用
addDocument(它返回一个 DocumentReference)后记住它,要么查询文档库而不知道其字段的内容以获取删除它的 ID . -
谢谢@DougStevenson。您能告诉我如何保存文档参考吗?我添加了一张我的 firebase 的照片,它没有存储“id”。谢谢
-
您当前正在使用
let _ = ...保存生成的文档引用。之后你用它做什么取决于你。它有一个 documentID 属性,其中包含新创建的文档的 ID。
标签: swift firebase google-cloud-firestore swiftui document