gpt4 book ai didi

swift - 使用 Swift 5 在 Firestore 中获取字段的旧值

转载 作者:可可西里 更新时间:2023-11-01 01:49:40 25 4
gpt4 key购买 nike

我正在尝试获取在 Firestore 中更改的字段的旧值。有什么方法可以访问字段更改后的先前值吗?这是我当前的代码,我想访问 .modified 下的旧 nickName 并打印出新的 nickName 和旧的.

db.collection("cities").whereField("state", isEqualTo: "CA").addSnapshotListener { querySnapshot, error in
guard let snapshot = querySnapshot else {
print("Error fetching snapshots: \(error!)")
return
}
snapshot.documentChanges.forEach { diff in
if (diff.type == .added) {
print("New city: \(diff.document.data())")
let nickName = myData["nickName"] as? String ?? ""
}
if (diff.type == .modified) {
let nickName = myData["nickName"] as? String ?? ""
}
if (diff.type == .removed) {
let nickName = myData["nickName"] as? String ?? ""
}
}
}

最佳答案

不幸的是,这不是 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 编写的。

关于swift - 使用 Swift 5 在 Firestore 中获取字段的旧值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55443496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com