2

Ich habe ein Array mit Wort Beispiel:Filtering Array von Wörterbüchern in Swift

(
     { 
     Email = "[email protected]"; 
     Name = "Kate Bell"; 
     Number = "(555) 564-8583"; 
    }, 
     { 
     Email = "[email protected]"; 
     Name = "Daniel Higgins"; 
     Number = "555-478-7672"; 
    } 
) 

und ich möchte dieses Wörterbuch filtern nach Key "Name"

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) { 
    let predicate = NSPredicate(format:"Name == %@", searchText) 
    let filteredArray = (arrContact as NSMutableArray).filteredArrayUsingPredicate(predicate) 
    print(filteredArray) 
    if(filteredArray.count == 0){ 
       searchActive = false; 
      } else { 
       searchActive = true; 
      } 
      tblData.reloadData() 
} 

ich immer leer Array immer bin im Ergebnis von oben swift code. Bitte helfen Sie mir, dieses Problem zu lösen.

Dank

Antwort

4

Ich schlage vor, mit Swift filter statt:

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) { 
    let filteredArray = arrContact.filter { $0["Name"] == searchText } 
    print(filteredArray) 
    if filteredArray.isEmpty { 
     searchActive = false 
    } else { 
     searchActive = true 
    } 
    tblData.reloadData() 
} 

Und wie @LeoDabus in seinem Kommentar erwähnt, können Sie sogar noch weiter vereinfachen:

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) { 
    let filteredArray = arrContact.filter { $0["Name"] == searchText } 
    print(filteredArray) 
    searchActive = !filteredArray.isEmpty 
    tblData.reloadData() 
} 
+2

'searchActive =! filteredArray.isEmpty' –

+0

rock you !!!!!!! –

5

diesen Versuchen für eine schnelle 3

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

    // Put your key in predicate that is "Name" 
    let searchPredicate = NSPredicate(format: "Name CONTAINS[C] %@", searchText) 
    let array = (arrContact as NSArray).filtered(using: searchPredicate) 

    print ("array = \(array)") 

    if(array.count == 0){ 
     searchActive = false; 
    } else { 
     searchActive = true; 
    } 
    self.aTable.reloadData() 
} 
+0

@Abhishek Rathore. Bitte lassen Sie mich wissen, wenn Sie Problem haben –

+0

, die eine ehrfürchtige Antwort war auch ich hatte das gleiche Problem, aber Ihre Antwort sparte meinen Tag –

0

wo "name" ist der k ey Name

var namePredicate = NSPredicate(format: "Name like %@", String(searchText)); 
     let searchPredicate = NSPredicate(format: "Name CONTAINS[C] %@", searchText) 
     arrrDict = self.arrrDict.filter { searchPredicate.evaluate(with: $0) }; 
     you will get the result in dictionary specialy made to get contats from the phone book 
Verwandte Themen