我正在尝试创建一个搜索函数,通过 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)
}
})
})
}
最佳答案
检查一下:
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 ...
如果您在搜索栏中输入“Mi”,第一个名字和第二个名字都会与您的搜索查询匹配。
关于swift - 在 Firebase 数据库中按用户名搜索用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52880406/