Search code examples
iosswiftuisearchcontroller

How to filter data in searchController using Share Class in swift 4


I am using UISearchController to filter data. Here is my code:

var filteredData: [ShareObj] = [ShareObj]()
     var arrHotelData : [ShareObj] = [ShareObj]()


extension AddAddressVC : UISearchResultsUpdating {

func updateSearchResults(for searchController: UISearchController) {
    if let searchText = searchController.searchBar.text {

        filteredData.removeAll()

        let type2Array = arrHotelData.filter { $0.strHotelName == searchText.lowercased()}

        print(type2Array)
        tableView.reloadData()
    }
}
}

Here is my code to save data

   for  i in 0..<arrData.count
                {
                    let ShareObj : ShareObj = AddHotelShareObj()
                    let dict = arrData[i]

                    if (dict[""]) != nil {
                        ShareObj.strHotelName = dict[""] as! String
                     }

                    if (dict[""]) != nil {
                        ShareObj.strAddress = dict[""] as! String
                    }

                    if (dict[""]) != nil {
                        ShareObj.strZipCode = dict[""] as! String
                    }

                  self.arrHotelData.append(ShareObj)

But array is returning []. Can you help me why it's not working


Solution

  • Try this:

    func updateSearchResults(for searchController: UISearchController) {
            if let searchText = searchController.searchBar.text {
    
                filteredData.removeAll()
    
                let filterPredicate = NSPredicate(format: "self contains[c] %@", argumentArray: [searchText])
    
                let type2Array = self.arrHotelData.filter { filterPredicate.evaluate(with: $0.strHotelName) }
                print(type2Array)
                tableView.reloadData()
            }
        }