我正在开发一个连接我大学学生的应用程序。每个学生都会创建一个具有各种个人资料属性的帐户,作为学生,您可以使用应用内的过滤器搜索其他个人资料。所以,例如,如果我是一名有兴趣加入Big Brothers Big Sisters的新生,我可以很容易地找到一个" Senior"谁是" Big Brothers Big Sisters"询问有关该组织的问题。
现在,我正在研究过滤器并需要一些帮助。我正在使用带有Google Firebase后端的Swift 4。单击搜索按钮后,在指定过滤器详细信息后,我可以使过滤器适用于单个属性。例如,下面我正在搜索数据库中具有" mateType"的所有用户。 (学年)价值"高级" (这将是一个拉动按钮标题的变量):
dataRef.reference(withPath: "USERS/").queryOrdered(byChild:"mateType").queryEqual(toValue: "Senior").observeSingleEvent(of: .value, with:
{ snapshot in
var fireAccountArray: [SearchUsers] = []
for fireAccount in snapshot.children {
let fireAccount = SearchUsers(snapshot: fireAccount as! DataSnapshot)
fireAccountArray.append(fireAccount)
}
self.users = fireAccountArray
self.tableView.delegate = self
self.tableView.dataSource = self
self.tableView.reloadData()
super.viewDidLoad()
})
我遇到的问题是我想过滤多个属性。所以,鉴于我之前的例子,如果我想找到一个" Senior"在" Big Brothers Big Sisters",有没有办法在搜索中过滤这两个字段?我可以在代码中添加另一个queryEqual()方法吗?
我的另一个问题是如何对搜索结果进行排序。我想按firstName排序,firstName是我数据库中的一个属性。当我没有queryEqual()方法时,我按照这种方式进行排序:
dataRef.reference(withPath: "USERS/").queryOrdered(byChild:"firstName").observeSingleEvent(of: .value, with:
{ snapshot in
var fireAccountArray: [SearchUsers] = []
for fireAccount in snapshot.children {
let fireAccount = SearchUsers(snapshot: fireAccount as! DataSnapshot)
fireAccountArray.append(fireAccount)
}
self.users = fireAccountArray
self.tableView.delegate = self
self.tableView.dataSource = self
self.tableView.reloadData()
super.viewDidLoad()
})
现在我有了queryEqual()方法,我需要使用子键填充queryOrdered()方法以使其工作。有没有办法可以通过firstName订购,还可以通过其他子密钥进行过滤?
提前感谢您的帮助!我对这款应用感到非常兴奋,并期待您的回复。