Я точно знаю, что происходит, но я не могу это исправить. На мой взгляд, это работает как:
- Получить документ из базы данных пожарного магазина, где поле - это определенная строка
db.collection("Connections").whereField("UID", isEqualTo: user.uid).whereField("status", isEqualTo: "waitingForUser").addSnapshotListener { (querySnap, error) in
Я храню let thisStatus: String = data?["status"] as! String
, а затем у меня есть оператор switch, который выполняет задачи в зависимости от текущего состояния.
Если существует ИД пользователя со статусом waitForUser Мне нужно обновить статус до onGoing
let document = querySnap?.documents.first
document?.reference.updateData(["status": "onGoing"], completion: { (error) in
Мне нужен слушатель снимка, потому что я буду менять статус несколько раз.
Проблема, с которой я столкнулся, заключается в том, что она запускается успешно в первый раз, но после шага 3 она переходит к шагу 1 и там, поскольку условие ложно, поскольку статус больше не waitForUser это onGoing , следовательно, заставляет программу выдавать фатальную ошибку, поскольку data?["status"]
нет. Что я должен сделать, чтобы сделать эту работу, мне нужен слушатель, и мне нужно несколько раз менять статус.
Вот полный блок кода ОБНОВЛЕНО :
db.collection("Connection").whereField("UID2", isEqualTo: user.uid).whereField("status", isEqualTo: "waitingForUser2").addSnapshotListener { (querySnap, error) in
if let error = error {
print("Error: \(error)")
} else {
let data = querySnap?.documents.first?.data()
guard let thisStatus: String = data?["status"] as! String
else { return }
switch thisStatus {
case "waitingForUser2":
//Update the status to onGoing
let document = querySnap?.documents.first
document?.reference.updateData([
"status": "onGoing"
], completion: { (error) in
print("Status is now on going")
})
case "connectionMade":
print("it's connection made")
default:
print("DEFAULT is ON")
}
}