在 iOS 上使用 Swift 从 Firebase Firestore 获取随机文档时出现问题
Issue when fetching random documents from Firebase Firestore with Swift on iOS
我想在用户每次打开我的应用程序时从 Firestore 中随机获取文档。
我正确地实现了该功能并且它根据需要随机获取文档。
我的问题是,例如,当随机文档是我的 Firestore 数据库中的最后一个文档时。它将停止加载新文档,因为它之后没有更多文档。因为我还实现了当用户到达页面底部时加载下一个文档。
我该如何解决这个问题?
请帮忙解决这个问题?我想加载随机文档,而不是在它到达最终文档之前停止加载文档。
这是我的代码:
func loadData(){
let randomShops = db.collection("Shops");
key = randomShops.document().documentID
db.collection("Shops").whereField("__name__", isGreaterThanOrEqualTo: self.key!).order(by: "__name__", descending: true).limit(to: 8).getDocuments(){
querySnapshot, error in
if let error = error {
print(error.localizedDescription)
}else {
self.lastDoc = querySnapshot?.documents[(querySnapshot?.documents.endIndex)! - 1]
self.shops = querySnapshot!.documents.compactMap({addShop(dictionary: [=12=].data())})
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
}
}
然后我会在用户向下滚动时获取新文档。但是如果出现的文档是我的 Firestore 数据库中的最后一个文档,即使不是所有文档都已加载,它也不会加载更多文档。
func getNextShops() {
db.collection("Shops").order(by: "__name__").start(afterDocument: lastDoc!).limit(to: 8).getDocuments(){ docs, err in
self.docsCount = docs?.count
if self.docsCount == 0{
self.tableView.stopLoading()
return
}else{
if let err = err {
print(err.localizedDescription)
}else{
docs?.documents.forEach{ data in
self.shops.append(addShop(dictionary: data.data())!)
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
self.lastDoc = docs?.documents[(docs?.documents.endIndex)! - 1]
self.lastDocID = self.lastDoc?.documentID
}
}
}
}
如果问题是没有获得足够的随机文档,只需再次 运行 请求并附加结果即可满足相同的条件。 Firestore 的大多数随机解决方案仅适用于 1 个随机浮点数,我建议在这种情况下添加第二个随机浮点数。
我想在用户每次打开我的应用程序时从 Firestore 中随机获取文档。
我正确地实现了该功能并且它根据需要随机获取文档。
我的问题是,例如,当随机文档是我的 Firestore 数据库中的最后一个文档时。它将停止加载新文档,因为它之后没有更多文档。因为我还实现了当用户到达页面底部时加载下一个文档。
我该如何解决这个问题?
请帮忙解决这个问题?我想加载随机文档,而不是在它到达最终文档之前停止加载文档。
这是我的代码:
func loadData(){
let randomShops = db.collection("Shops");
key = randomShops.document().documentID
db.collection("Shops").whereField("__name__", isGreaterThanOrEqualTo: self.key!).order(by: "__name__", descending: true).limit(to: 8).getDocuments(){
querySnapshot, error in
if let error = error {
print(error.localizedDescription)
}else {
self.lastDoc = querySnapshot?.documents[(querySnapshot?.documents.endIndex)! - 1]
self.shops = querySnapshot!.documents.compactMap({addShop(dictionary: [=12=].data())})
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
}
}
然后我会在用户向下滚动时获取新文档。但是如果出现的文档是我的 Firestore 数据库中的最后一个文档,即使不是所有文档都已加载,它也不会加载更多文档。
func getNextShops() {
db.collection("Shops").order(by: "__name__").start(afterDocument: lastDoc!).limit(to: 8).getDocuments(){ docs, err in
self.docsCount = docs?.count
if self.docsCount == 0{
self.tableView.stopLoading()
return
}else{
if let err = err {
print(err.localizedDescription)
}else{
docs?.documents.forEach{ data in
self.shops.append(addShop(dictionary: data.data())!)
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
self.lastDoc = docs?.documents[(docs?.documents.endIndex)! - 1]
self.lastDocID = self.lastDoc?.documentID
}
}
}
}
如果问题是没有获得足够的随机文档,只需再次 运行 请求并附加结果即可满足相同的条件。 Firestore 的大多数随机解决方案仅适用于 1 个随机浮点数,我建议在这种情况下添加第二个随机浮点数。