swift - 在 Swift 中写入 Firestore 时,如何将 addSnapshotListener 方法与 getDocument 一起使用?
问题描述
我正在尝试从 Firebase Firestore 获取数据。我成功地获取了数据,但是,我将它显示在 a 中UITableView
,我需要它来实时获取它。我正在使用该getDocuments
方法,但无法添加快照侦听器,因为我无法覆盖getDocuments
参数。
func loadPartiesDataFromFirebase() {
let db = Firestore.firestore()
db.collection("parties").getDocuments() { snapshot, err in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in (snapshot!.documents) {
let title = document.data()["title"] as? String ?? "New Party"
let location = document.data()["location"] as? String ?? "No Location"
let date = document.data()["date"] as? String ?? "No Date"
let startTime = document.data()["startTime"] as? String ?? "No Start Time"
let endTime = document.data()["endTime"] as? String ?? "No End Time"
self.parties.append(Party(title: title, location: location, date: date, startTime: startTime, endTime: endTime))
}
}
self.yourPartiesTableView.reloadData()
}
我希望它能够实时持续显示 Firestore 中的数据。我怎样才能在 Swift 中做到这一点?
解决方案
您需要向集合中添加一个侦听器。
let db = Firestore.firestore()
let listener = db.collection("parties").addSnapshotListener { (snapshot, error) in
switch (snapshot, error) {
case (.none, .none):
print("no data")
case (.none, .some(let error)):
print("some error \(error.localizedDescription)")
case (.some(let snapshot), _):
print("collection updated, now it contains \(snapshot.documents.count) documents")
}
}
此外,您可以存储对侦听器的引用,并在不需要时将其删除。
listener.remove()
推荐阅读
- sql - SQL 查询不能在 FROM 语句中使用变量
- powershell - 如何在写入主机 cmdlet 中检索 PowerShell 变量的成员
- momentjs - UNIX 时间戳使用 Moment.js 根据时区显示不同的日期
- reactjs - 反应 js,Jsfiddle。处理不了
- tensorflow-serving - TensorFlow 服务开发者环境
- android - 使用矢量可绘制减小 apk 大小
- sql - 更新 SQL 查询以删除左括号 sysbol 后的所有字符
- angular - 自定义组件不重复但被替换
- react-native - 使用 redux-thunk 时,操作可能没有未定义的“类型”属性错误
- asp.net-web-api - PushStreamContent 和流/序列化过程中的异常