Фильтрация пользовательского ввода не работает в firebase swift

# #ios #swift #firebase-realtime-database #searchbar

Вопрос:

Я использую firebase для хранения данных, теперь я хочу, чтобы, когда пользователь вводит имя в поисковике, он извлекал запись из firebase, но она не работает нормально.Также мне нужен ответчик клавиатуры при вводе пользователем.В классе сетевых служб есть функция, которая извлекает всех пользователей из firebase, и эта функция вызывается в классе разговоров.

Класс сетевого сервиса:

  func getAllUsers(completion:@escaping(Result<[[String:String]],Error>)-> Void){
        database.child("users").observeSingleEvent(of: .value) { (snapshot) in
            guard let getUsers = snapshot.value as? [[String:String]] else {
                completion(.failure(DatabaseEnum.failToFetch))
                return
            }
            completion(.success(getUsers))
        }
    }
 

Новый класс преобразования:

 var users : [[String:String]] = []
var userResult = [[String:String]]()
var searching = false

extension NewConversationController: UITableViewDelegate,UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    userResult.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    configureUserCell(tableView, cellForRowAt: indexPath)
}
func configureUserCell(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let userCell = tableView.dequeueReusableCell(withIdentifier: String(describing: UserCell.self)) as? UserCell else {return UITableViewCell()}
     let obj = self.userResult[indexPath.row]
    userCell.userData = obj["firstName"] as? String ?? ""
    return userCell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at:indexPath, animated: true)
}
}

extension NewConversationController: UISearchBarDelegate{

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

    print("you seach us (searchBar)")
    searchBar.resignFirstResponder()
    userResult.removeAll()
    spinner.show(in: view)
    searchUser(user: searchText)
}

func searchUser(user:String){
    if searching{ //serching
        filterCurrentUser(with: user)
    }
    else{
        NetworkingService.shared.getAllUsers { (result) in
            switch result{
                case .success(let getData):
                    self.searching = true
                    self.users = getData
                    self.filterCurrentUser(with: user)
            case .failure(let error):
                print("failed to get data from db(error)")
            }
        }
    }

}

func filterCurrentUser(with userDb:String){
    guard searching else {return}
    self.spinner.dismiss()
    userResult = users.filter({
        guard let name = $0["firstName"]?.lowercased()  else {return false}
        return name.hasPrefix(userDb.lowercased())
    })

    updateUI()
    
}

func updateUI(){
    if userResult.isEmpty{
        self.tableView.isHidden = true
    }
    else{
        self.tableView.isHidden = false
        self.tableView.reloadData()
    }
}
}