Я знаю, что вы ответили на свой вопрос, но я хотел предположить, что может быть более элегантное решение.
В этом вопросе отсутствуют некоторые данные, поэтому я приведу пример случая - это можетбыть полезным в общем процессе мышления.
Предположим, что ваше приложение позволяет патентам (пользователям) отслеживать их рецепты.Это означает, что будет несколько пользователей, каждый из которых имеет рецепт.Этот рецепт имеет лекарство и дозировку.
Когда пользователь хочет удалить рецепт, код загружает их все и выполняет итерацию, пока не находит правильный, а затем удаляет его.Это требует перебора данных, что на самом деле неэффективно.
Давайте предложим другой метод, и мы предположим, что это для пользователя 0 (uid_0)
Вот как будет выглядеть структура Firestore
user_prescriptions
uid_0
prescriptions
prescription_0
medication: "some med"
dosage: "some dosage"
prescription_1
medication: "some med"
dosage: "some dosage"
uid_1
prescriptions
prescription_0
medication: "some med"
dosage: "some dosage"
prescription_1
medication: "some med"
dosage: "some dosage"
когда пользователь хочет добавить лекарство, мы вызываем функцию uploadPrescription и передаем ему лекарство и дозировку
self.uploadPrescription(dosage: "100mg", medication: "Aspirin")
и вот функция для записи этогоданные в Firestore.
func uploadPrescription(dosage: String, medication: String) {
let uid = "uid_0"
let collectionRef = db.collection("users_prescriptions").document(uid).collection("prescriptions")
let prescriptionData = ["medication": medication,
"dosage": dosage]
var ref: DocumentReference? = nil
ref = collectionRef.addDocument(data: prescriptionData) { err in
if let err = err {
print(err.localizedDescription)
return
} else {
let docJustAddedRef = ref?.documentID
print(docJustAddedRef!)
//maybe create a PrescriptionClass and add it to a tableview
}
}
}
Интересно отметить, что эта функция создает уникальный дочерний узел для каждого рецепта и захватывает ссылку на него (откуда берутся идентификаторы prescription_0 и prescription_1).
Эта ссылка будет иметь идентификатор документа.Это позволит каждому пользователю иметь бесконечное количество уникальных рецептов.
Тогда информация о рецептах может отображаться в пользовательском интерфейсе, возможно, в виде таблицы.DocumentID является идентификатором этого конкретного рецепта и с тех пор будет использоваться для удаления или изменения информации о рецепте.Много раз при запуске приложения все предписания будут загружаться в класс, и каждое из них будет храниться в массиве, используемом в качестве источника данных tableView.Когда пользователь проведет пальцем по удалению, вы получите строку, которую он хочет удалить, получите этот объект предписания из массива - удалите его из массива, а затем, используя documentID, удалите его из Firestore.
func removeMedDosage(documentID: String) {
let uid = "uid_0"
let docRef = db.collection("users_scripts").document(uid).collection("prescriptions").document(documentID)
docRef.delete()
}