Filtering array of dictionaries in Swift

Abhishek R picture Abhishek R · Apr 8, 2016 · Viewed 15.9k times · Source

I have An Array With Dictionaries example :

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

And i want to filter this dictionary according to 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()
 }

I am always getting empty array in result from above swift code. Please help me to resolve this issue. Thanks

Answer

Eric Aya picture Eric Aya · Apr 8, 2016

I suggest using Swift's filter instead:

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

And as mentioned by @LeoDabus in his comment, you can even simplify further:

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