2017-12-21 2 views
0

Als Fortsetzung meiner vorherigen Frage Trying to compare Any? with String Ich würde gerne wissen, was ich implementieren soll, um die Tabellenansicht mit den JSON-Antwortobjekte, die die Suchkriterien aus einem Textfeld Eingabe erfüllen.Suche JSON-Antwort zum reload tableView

Dies ist die aktuelle Funktion ist:

public func cargarDatos_filtrados(){ 
     //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 { 
        let nom = dict["nombre"] 

        if (nom == self.texto_buscado.text){ 
         //DO SOMETHING 
        } 


        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() 
     } 
    } 
+0

Rate, dass du self.directorios benutzt, um deine Tabellenansicht zu füttern. Zwei Fragen - Filtern Sie die Ergebnisse lokal? oder senden Sie eine Suchzeichenfolge an Ihre REST-API? Im ersten Fall müssen Sie ein Stammdatenarray verwalten und ein anderes Array verwenden, das gefilterte Daten gemäß Ihrem Suchtext enthält. In letzterem Fall erhalten Sie sowieso die richtigen Ergebnisse vom Server und laden Ihre Tabelle aus dem Array der Ergebnisse, die Sie vom Server erhalten haben. – Shripada

+0

Nebenbei bemerkt ist Ihr DirectorioCompleto zu kompliziert und benötigt so viele Argumente. Sie können das Wörterbuch einfach übergeben und die gesamte Extraktion in DirectorioCompleto ausblenden. – Shripada

+0

Behalten Sie zwei Instanzen von DirectorioCompleto-Arrays bei, ein Original und ein Filter, und verwenden Sie dann einfach .filter für Ihr gefiltertes Array. – koropok

Antwort

1

Für in Ihrem Verzeichnis suchen, dies umzusetzen. Ich gehe davon aus, dass Sie mit dem Schlüssel nombre suchen müssen und es eine Zeichenfolge ist.

Setzen Sie diesen Code, wo Sie suchen möchten.

if let text = self.texto_buscado.text 
      { 
       let filteredArray = self.directorios.filter{$0.nombre.localizedCaseInsensitiveContains(text) || $0.apellidos.localizedCaseInsensitiveContains(text)} 

oder genau für

passend
   let filteredArray = self.directorios.filter{$0.nombre == text || $0.apellidos == text} 
      } 

filteredArray als gesuchtes Ergebnis und dieses Array verwendet für Ihre tableView

self.tableView.reloadData() 

Ich hoffe, das Ihnen Neuladen helfen.

+0

Danke, und wie könnte ich die Suche gegen mehr als einen Schlüssel durchführen? Alle Objekte sind Strings. – mvasco

+0

Fertig. Bitte prüfe. –

+0

Vielen Dank, ich werde Ihren Vorschlag versuchen – mvasco