К сожалению, это не особенность Firestore.Что вы можете сделать, так это иметь другое поле oldNickName
и, используя Firebase Functions, автоматически обновлять его при изменении поля nickName
.
Лучшее решение - хранить nickName
локально, поэтому вы можете вернуться кваша локальная переменная при изменении nickName
, получая доступ к недавно обновленной переменной в базе данных и предыдущей nickName
локально.Вот обновленный код:
var nickNames = [String : String]()
db.collection("cities").whereField("state", isEqualTo: "CA").addSnapshotListener { snapshot, error in
guard error == nil, let snapshot = snapshot?.documentChanges else { return }
snapshot.forEach {
let document = $0.document
let documentID = document.documentID
let nickName = document.get("nickName") as? String ?? "Error"
switch $0.type {
case .added:
print("New city: \(document.data())")
nickNames[documentID] = nickName
case .modified:
print("Nickname changed from \(nickNames[documentID]) to \(nickName)")
nickNames[documentID] = nickName
case .removed:
print("City removed with nickname \(nickNames[documentID])")
nickNames.removeValue(forKey: documentID)
}
}
}
nickNames
- словарь с ключом cityID
и значением nickName
.Этот код написан на Swift 5
.