Поиск пользователей по их имени в базе данных Firebase? - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь создать функцию поиска, которая запрашивает пользователя по его имени из базы данных Firebase, но я хочу, чтобы моя функция возвращала пользователям только точное имя пользователя (буквы), введенное в строку поиска.скажем так, если я введу Майка в строку поиска и коснусь поиска, я не хочу, чтобы он что-либо возвращал, если нет пользователя с таким точным именем пользователя (Майк).

Буду очень признателен за помощь в улучшении моей функции поиска, ребята, спасибо!

Вот моя функция:

 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)
                }
            })
        })

    }

1 Ответ

0 голосов
/ 18 октября 2018

Проверьте это:

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)
    })
}

В результате у вас будет список имен.

Но если вам нужно только одно имя, используйте:

let nameOfFirstUser: String = userNames.first

Почему лучше получить полный список имен?

Например, в вашей базе данных могут быть такие имена: Майк, Мишель ...

И если вы введете «Mi» в строке поиска, имя и второе имя будут соответствовать вашему поисковому запросу.

...