swift - 在 Firebase 数据库中按用户名搜索用户?

标签 swift firebase firebase-realtime-database querying

我正在尝试创建一个搜索函数,通过 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/

相关文章:

firebase - 如何使用 Firebase 规则创建过期数据?

ios - 子类化 Material View 不显示 Material 深度

arrays - Any 和 AnyObject 之间的 Swift 异常

swift - Alamofire 发送对象作为参数

javascript - 如何处理firestore中为空的数据?

java - 从实时转换到 firestore 加载数据并在 TextView 中显示

ios - 停止对 firebase 的查询?

SwiftUI:扩展数组以获得数组实例的绑定(bind)

javascript - 如何使排序表与 Firebase 中的 Angular 8 + 数据一起使用?

firebase - Firebase 托管的身份验证