如何使用 Share Class in swift 4 在 searchController 中过滤数据

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

我正在使用 UISearchController 来过滤数据。这是我的代码:

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 { [=12=].strHotelName == searchText.lowercased()}

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

这是我保存数据的代码

   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)

但是数组正在返回 []。你能帮我看看为什么它不起作用吗

试试这个:

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: [=10=].strHotelName) }
            print(type2Array)
            tableView.reloadData()
        }
    }

你可以试试这个:

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    filteredArray.removeAll()
    filteredArray = arrHotelData.filter({[=10=].lowercased().contains(searchText.lowercased())})
    self.tableView.reloadData()
}

这里应该使用filteredData来显示和替换代码

let ShareObj : ShareObj = AddHotelShareObj()let shareObj : ShareObj = AddHotelShareObj() 因为相同的引用和类型可能会导致问题。