Filtering array of dictionaries in Swift
17,888
Solution 1
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()
}
Solution 2
Try This for swift 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()
}
Solution 3
Swift
Get list of item/array from model class.
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if self.searchBarItems.text == "" {
self.arrFilter = self.arrayDictionarySubModel
} else {
self.arrFilter.removeAll()
let filteredArray = self.arrayDictionarySubModel.filter { ($0.itemTitle?.contains(self.searchBarItems.text ?? ""))!}
print("filtered array:- ", filteredArray[0].itemTitle!)
self.arrFilter = filteredArray
}
self.searchItemTableView.reloadData()
}
Related videos on Youtube
Author by
Abhishek R
Updated on September 15, 2022Comments
-
Abhishek R over 1 year
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
-
Leo Dabus about 8 years
searchActive = !filteredArray.isEmpty