我正在尝试创建一个搜索功能,该功能通过Firebase数据库中的用户名查询用户,但是我希望该功能仅返回具有在搜索栏中键入的确切用户名(字母)的用户。因此可以说,如果我在搜索栏中输入Mike并点击“搜索”,那么我不希望它返回任何内容,除非有一个使用此确切用户名(Mike)的用户。
非常感谢你们改善我的搜索功能的任何帮助,谢谢!
这是我的功能:
var REF_USERS = Database.database().reference().child("users")
func searchQueryUsers(text: String, completion: @escaping (theUsers) -> Void) {
REF_USERS.queryOrdered(byChild: "username").queryStarting(atValue: text).observeSingleEvent(of: .value, with: {
snapshot in
snapshot.children.forEach({ (sss) in
let child = sss as! DataSnapshot
if let dict = child.value as? [String: Any] {
let user = theUsers.setUser(dict: dict, key: child.key)
completion(user)
}
})
})
}
答案 0 :(得分:0)
检查:
func searchQueryUsers(text: String, completion: @escaping (_ userNames: [String]) -> Void) {
var userNames: [String] = []
REF_USERS.queryOrdered(byChild: "username").queryStarting(atValue: text).observeSingleEvent(of: .value, with: { snapshot in
for item in snapshot.children {
guard let item = item as? DataSnapshot else {
break
}
//"name" is a key for name in FirebaseDatabese model
if let dict = item.value as? [String: Any], let name = dict["name"] as? String {
userNames.append(name)
}
}
completion(userNames)
})
}
因此,您将获得一个名称列表。
但是如果只需要1个名称,请使用:
let nameOfFirstUser: String = userNames.first
为什么要获取整个名称列表更好?
例如,在您的数据库中,可能有这样的名称:Mike,Michel ...
如果您在searchBar中输入“ Mi”,则名字和名字都将与您的搜索查询匹配。