Swift字典过滤

时间:2017-12-22 04:02:12

标签: swift dictionary

在尝试实现从远程JSON响应和搜索功能填充的表视图几天后,我想我到了工作结束。

到目前为止,这是我在SO的一些专家的帮助下所做的。

class DirectorioViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate {

    @IBOutlet weak var searchBar: UISearchBar!
    @IBOutlet weak var tableView: UITableView!

    var isSearching = false


    let URL_GET_DATA = "http://.../leer_directorio_todos.php"

    var directorios = [DirectorioCompleto]()
    var filteredData = [DirectorioCompleto]()


    override func viewDidLoad() {
        ....

        cargarDatos()
    }

    public func cargarDatos (){
        //fetching data from web api
        Alamofire.request(URL_GET_DATA).responseJSON { response in
            self.directorios.removeAll()

            //getting json
            if let json = response.result.value as? [[String:String]] {
                print (json)

                //traversing through all elements of the array
                for dict in json {

                    self.directorios.append(DirectorioCompleto(
                        nombre: dict["nombre"],
                        apellidos: dict["apellidos"],
                        apodo: dict["apodo"],
                        cumple: dict["cumple"],
                        conyuge: dict["conyuge"],
                        cumple_conyuge: dict["cumple_conyuge"],
                        aniversario_bodas: dict["aniversario_bodas"],
                        empresa: dict["empresa"],
                        direccion_empresa: dict["direccion_empresa"],
                        tel_negocio: dict["tel_negocio"],
                        fecha_ingreso: dict["fecha_ingreso"],
                        num_rotario: dict["num_rotario"],
                        padrino: dict["padrino"],
                        direccion_casa: dict["direccion_casa"],
                        tel_casa: dict["tel_casa"],
                        celular: dict["celular"],
                        email: dict["email"],
                        email_privado: dict["email_privado"],
                        clasificacion: dict["clasificacion"],
                        imagen: dict["imagen"]
                    ))

                }
            }

            //displaying data in tableview
            self.tableView.reloadData()
        }
    }

    //the method returning size of the list
    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{

        if isSearching{
            return filteredData.count
        }
        return directorios.count
    }


    //the method returning each cell of the list
    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{

        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! DirectorioTableViewCell
        let directorio: DirectorioCompleto

        if isSearching {
           directorio = filteredData[indexPath.row]

        } else {
            directorio = directorios[indexPath.row]
        }

        // set the data...

        return cell
    }


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

        if searchBar.text == nil || searchBar.text == "" {

            isSearching = false

            view.endEditing(true)

            tableView.reloadData()

        } else {

            isSearching = true

            filteredData = directorios.filter({$0 == searchBar.text!})

            tableView.reloadData()
        }
    }
}

现在我正在尝试在字典中实现搜索功能,在搜索Google和SO后,我需要你的帮助来完成最后一部分:

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

        if searchBar.text == nil || searchBar.text == "" {

            isSearching = false

            view.endEditing(true)

            tableView.reloadData()

        } else {

            isSearching = true

            filteredData = directorios.filter({$0 == searchBar.text!})

            tableView.reloadData()
        }
    }

我如何解决这最后一部分?如何过滤所有键或几个键的整个字典?

1 个答案:

答案 0 :(得分:0)

我现在拥有它,谢谢大家的支持和建议:

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

    if searchBar.text == nil || searchBar.text == "" {

        isSearching = false

        view.endEditing(true)

        tableView.reloadData()

    } else {

        isSearching = true

        filteredData = self.directorios.filter{($0.nombre?.localizedCaseInsensitiveContains(searchBar.text!))! || ($0.apellidos?.localizedCaseInsensitiveContains(searchBar.text!))!}

        tableView.reloadData()
    }
}