我在本地文件中有数据,我已经将它们加载到tableView中,现在我想通过搜索栏进行搜索/过滤。
我尝试了一些在Internet上找到的解决方案,但是我不知道如何访问结构中的特定数据。
这是结构的一部分:
struct Model: Codable {
var data: [Description]
}
struct Description: Codable {
var id: Int
var name: String
var address: String
var city: String
var description: String
var countryId: Int
var webSite: String
var status: Int
var accountType: Int
var addDate: String
var placeGroupId: Int
var longitude: Double
var latitude: Double
var distance: Double
var working: Bool
var promotion: String
var repertoire: Repertoire
var workingHour: WorkingHour
var country: Country
var reviewNum: Int
var score: Double
var placeImgUrl: String
}
var model: Model?
这是我的ViewController中的一些代码:
var filteredObjects = [Description]()
let searchController = UISearchController(searchResultsController: nil)
func searchBarIsEmpty() -> Bool {
return searchController.searchBar.text?.isEmpty ?? true
}
func filterContentForSearchText(_ searchText: String, scope: String = "All") {
}
extension ViewController: UISearchResultsUpdating {
func updateSearchResults(for searchController: UISearchController) {
<#code#>
}
}
我有变量模型,这是结构模型的类型。结构模型具有变量数据,该数据是结构描述的类型。最后,在结构描述中,我有变量名。我的tableView单元格显示了模型的名称(model?.data [indexPathrow.row] .name)。现在,我需要按tableView单元格中显示的名称进行搜索。我希望我能清楚地解释。非常感谢你!
答案 0 :(得分:0)
假设objects
也是[Description]
,并且代表数据源数组
func updateSearchResults(for searchController : UISearchController)
{
let searchString = searchController.searchBar.text!
if searchString.isEmpty {
filteredObjects.removeAll()
} else {
filteredObjects = objects.filter{ $0.name.range(of: searchString, options: .caseInsensitive) != nil }
}
tableView.reloadData()
}
在表格视图中,数据源方法根据objects
显示filteredObjects
或searchController.isActive