我确切地知道正在发生什么,但是我无法解决它。在我看来,这就像:
db.collection("Connections").whereField("UID", isEqualTo: user.uid).whereField("status", isEqualTo: "waitingForUser").addSnapshotListener { (querySnap, error) in
我要存储let thisStatus: String = data?["status"] as! String
,然后有一个switch语句,该语句根据当前状态执行任务。
如果有状态为 waitingForUser 的用户ID ,我需要将状态更新为 onGoing
let document = querySnap?.documents.first
document?.reference.updateData(["status": "onGoing"], completion: { (error) in
我需要快照侦听器,因为我将多次更改状态。
我遇到的问题是它第一次成功运行,但是在第3步之后转到第1步,并且由于条件为false,因为状态不再为 waitingForUser 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")
}
}