我的searchBar文本正在更新我的查询,但没有像我预期的那样从Firestore返回数据。
这是我的数据模型中的方法:
func getMealPlans(starred starredOnly:Bool = false, textToQuery searchText:String = "") {
listener?.remove()
let db = Firestore.firestore()
var query:Query = db.collection("mealPlans")
query = query.whereField("title", isGreaterThanOrEqualTo: searchText)
func queryData() {
self.listener = query.addSnapshotListener({ (snapshot, error) in
// Check for errors
if error == nil && snapshot != nil {
var mealPlans = [MealPlan]()
// Parse documents into mealPlans
for doc in snapshot!.documents {
let m = MealPlan(
docID: doc["docID"] as? String,
title: doc["title"] as! String)
mealPlans.append(m)
}
// Call the delegate and pass back the notes in the main thread
DispatchQueue.main.async {
self.delegate?.mealPlansRetrieved(mealPlans: mealPlans)
}
}
})
}
queryData()
}
这是我的视图控制器中的搜索栏方法:
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
let searchedText = searchText.lowercased()
model.getMealPlans(textToQuery: searchedText)
self.tableView.reloadData()
}
我想知道我的模型中的query=query.wherefield(“title”,isgreaterthanorequalto:searchText)
是否可能是我的问题的根源。当我在此代码后打印(searchText)
时,我键入的searchText
会按预期显示在控制台中。但是表视图不会更新具有匹配title
的单元格,即使它是完全匹配的。
You need to use document data property to load MealPlan. Better make it the following way:
1. Define data model as Codable:
import Foundation
import FirebaseFirestore
import FirebaseFirestoreSwift
struct MealPlan: Codable {
@DocumentID var id: String?
title: String?
}
2. Then use compact map to get mealPlans:
mealPlans = snapshot.documents.compactMap { document -> MealPlan? in
do {
let result = try document.data(as: MealPlan.self)
return result
}
catch {
print(error)
return nil
}
}
你需要完成
func getMealPlans(starred starredOnly:Bool = false, textToQuery searchText:String = "",completion:@escaping(() ->([MealPlan]))) {
listener?.remove()
let db = Firestore.firestore()
var query:Query = db.collection("mealPlans")
query = query.whereField("title", isGreaterThanOrEqualTo: searchText)
self.listener = query.addSnapshotListener({ (snapshot, error) in
// Check for errors
if error == nil && snapshot != nil {
var mealPlans = [MealPlan]()
// Parse documents into mealPlans
for doc in snapshot!.documents {
let m = MealPlan(
docID: doc["docID"] as? String,
title: doc["title"] as! String)
mealPlans.append(m)
}
// Call the delegate and pass back the notes in the main thread
DispatchQueue.main.async {
self.delegate?.mealPlansRetrieved(mealPlans: mealPlans) // remove this if you need to as callback will deliver the result to you
completion(mealPlans)
}
}
})
}
然后
model.getMealPlans(textToQuery: searchedText) { res in
// change table model to res here
self.tableView.reloadData()
}
我在集合中有大约30条记录,其中几乎25条包含单词。现在,当我尝试使用时,它不会返回任何东西。 下面是我的查询代码: 下面是我的Firestore截图:
因此,我正在构建一个云函数,它接受customerID,根据customerID过滤文档,并返回文档列表。遗憾的是,它返回一个空数组。我相信这是一个简单的解决办法。 以下是云功能: 下面是我从客户端调用它时的代码。 此外,这里是一个萤火虫的屏幕截图。 firestore的截图
我有一个mysql查询,它连接5个不同的表以返回产品的特定属性。它应该只返回每个产品一次。但是由于产品可能有多个类别,它为每个类别返回产品一次。 以下是选择: 如果给定的产品,比如product_id32被分配到多个类别,它将为每个类别返回一次product_id32,唯一的区别是结果是类别名称。 如果有人可以帮助返工选择只包括每个产品一次,无论类别我将不胜感激的帮助。 将类别恢复为产品的MAX(
问题内容: 如何获取使用SQL Server的SQL查询返回的列数? 例如,如果我有如下查询: 它应该返回表A1中的总列数+表A2中的总列数。但是查询可能会更复杂。 问题答案: 这是一种方法: 您可以通过创建视图来执行类似的操作。
我正在尝试使用一个以我的类单元格为键的HashMap。但是,在将项放入HashMap之后,对该项调用contains将返回false。 这会打印出false和true,在这里应该打印true和true,因为根据映射,docs containsKey使用.equals()。我做错了什么?