У меня есть проблема, связанная с запросом Firestore. В настоящее время у меня есть структура Firestore, как показано ниже.
Я хочу создать поисковую систему, в которой у пользователя есть возможность фильтровать программу, статус и категорию. Ниже приведен исходный код фильтра:
var filterProg = ""
var filterStat = ""
var filterCat = ""
@IBAction func filterButtonDidTapped(_ sender: Any) {
self.agencyList.removeAll()
db.collection("fund")
.whereField("programme", isEqualTo: filterProg )
.whereField("status", isEqualTo: filterStat )
.whereField("category", isEqualTo: filterCat )
.getDocuments()
{
(querySnapshot, err) in
if let err = err
{
print("Error getting documents: \(err)");
}
else
{
// var agencyNumber = 0
for document in querySnapshot!.documents {
let data = document.data()
let agencyy = data["age"] as? String ?? ""
let title = data["name"] as? String ?? ""
let agencyId = document.documentID
print(title)
print(agencyy)
print(agencyId)
let newModel = DisplayModel(agency: title, agencyId: agencyId)
self.agencyList.append(newModel)
// self.originalData.append(title)
}
self.tableView.reloadData()
}
}
}
из приведенного выше кода переменные filterProg
, filterStat
и filterCat
изменится с пустой строки ""
на некоторую строку из UIPicker в зависимости от выбора пользователя. Проблема в том, что если пользователь решит выполнить фильтрацию только для filterProg
(программа) и filterStat
(состояние), переменная fileterCat
останется пустой строкой ""
. Это привело к тому, что данные из firestore ничего не отображали. Я пробовал что-то вроде: проверить, является ли переменная пустой строкой или нет, как показано ниже:
let query = db.collection("fund")
if filterProg != "" {
query.whereField("programme", isEqualTo: filterProg )
}
if filterProg != "" {
query.whereField("status", isEqualTo: filterStat )
}
if filterProg != "" {
query.whereField("category", isEqualTo: filterCat )
}
.getDocuments() //got error here
{
(querySnapshot, err) in
Я получил ошибку .getDocuments()
Ссылка на член 'getDocuments' не может быть разрешена без
контекстный тип
Я застрял с этой проблемой на неделю. На самом деле, возможно ли установить фильтр на Firestore?