swift - Xcode/Firebase 改进搜索功能

标签 swift firebase-realtime-database searchbar

我是 Xcode 和 firebase 的新手。 我昨天做了这个搜索栏,但我只用它来搜索一件事(字符串)。现在我问如何搜索所有数据。 数据来自 firebase,既是数字又是文本:

"Fornavn" - Text,
"Efternavn" - Text,
"Personnr" - Numbers

代码:

import UIKit
import FirebaseDatabase

class FindTableViewController: UITableViewController, 
UISearchResultsUpdating {

@IBOutlet var FindTableView: UITableView!

let searchController = UISearchController(searchResultsController: nil)

var usersArray = [NSDictionary?]()
var filteredUsers = [NSDictionary?]()
var databaseRef = Database.database().reference()

override func viewDidLoad() {
    super.viewDidLoad()

    searchController.searchResultsUpdater = self
    searchController.dimsBackgroundDuringPresentation = false
    definesPresentationContext = true
    tableView.tableHeaderView = searchController.searchBar

    databaseRef.child("Buyers").queryOrdered(byChild: "personnr").observe(.childAdded, with: {(snapshot) in
    self.usersArray.append(snapshot.value as? NSDictionary)

        self.FindTableView.insertRows(at: [IndexPath(row:self.usersArray.count-1,section:0)], with: UITableViewRowAnimation.automatic)

    })
    { (error) in
        print(error.localizedDescription)
    }

函数如下:

func updateSearchResults(for searchController: UISearchController) {
    filterUsers(searchText: self.searchController.searchBar.text!)
}

func filterUsers (searchText:String) {
    self.filteredUsers = self.usersArray.filter{ user in

        let username = user!["Fornavn"] as? String

       return(username?.lowercased().contains(searchText.lowercased()))!

   }

    tableView.reloadData()

}

关于如何搜索除“Fornavn”以外的文本的任何线索?

最佳答案

你可以这样做:

func filterUsers (searchText:String) {
    self.filteredUsers = self.usersArray.filter{ user in
        var searchResultForUserName = false
        var searchResultForSecondSearch = false 
        var searchResultForThirdParam = false
        if let username = user!["Fornavn"] as? String {
               searchResultForUserName =  username.lowercased().contains(searchText.lowercased())
        }
        if  let secondSeachedStr = user!["Efternavn"] as? String {
                   searchResultForSecondSearch =  secondSeachedStr.lowercased().contains(searchText.lowercased())
       }
       if let number = user!["Personnr"] as? String {

             searchResultForThirdParam = number.lowercased().contains(searchText.lowercased()) 
       } 

       return searchResultForUserName || searchResultForSecondSearch || searchResultForThirdParam 


   }

    tableView.reloadData()

}

注意:请使用可选绑定(bind)来解包代码中的可选值

关于swift - Xcode/Firebase 改进搜索功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46293570/

相关文章:

javascript - 如何在搜索栏中获取项目的详细信息?

ios - CGRect 在 vi​​ewDidLoad 之外的闭包中不工作

ios - 尝试使用 NSUserDefaults() 保存数组时出错

ios - swift search Bar和navigation bar启动后隐藏

java - Firebase 读取每个条目中的子目录

android - 如何在 android firebase 中找到列表的大小?

ios - 搜索结果不起作用去添加 tableviewcell

ios - 集合单元格内容大小

swift - 为什么 NSURL 上的这个可失败初始化器(采用可选字符串)无法编译?

ios - 从函数返回之前等待 Firebase 加载