在表视图控制器iOS swift中搜索特定记录

时间:2017-10-15 19:29:42

标签: ios arrays swift uitableview uisearchbar

我使用jsonserialization方法从url获取数据,并将每个记录存储在类的对象中,并在表vc中显示每条记录。

现在我想使用搜索栏实现搜索并观看许多教程,这些教程在字符串类型数组和另一个字符串类型数组(数组中的硬编码值)之间进行了比较。 但根据我的需要,我的数据存储在类obj中而不是硬编码数据,来自该对象的数据显示在cellforrow上。 cellforrow包含。

if isSearching 
{
    cell.textLabel?.text = searchArray[indexPath.row] //.compName

    cell.detailTextLabel?.text = searchArray[indexPath.row]
}
else{ 
    cell.textLabel?.text = tempArray[indexPath.row].compName

    cell.detailTextLabel?.text = tempArray[indexPath.row].complocation
}
return cell

那么如何实现搜索栏,得到以下错误。 请帮忙! 这里我的班级名称是 - >可比。 和searchArray是字符串数组  tempArray是包含类obj

的数组

Image of the error

3 个答案:

答案 0 :(得分:1)

找到它。在这里 以下是其他条件的变化

searchArr   = tempArray.filter { $0.<classAttribute>.contains(searchText) }

searchArray = searchArr as! [comp]

print("search match")

listTableView.reloadData()

这里searchArr和searchArray和tempArray是类类型的数组,&amp; classAttribute是你要在tableview中搜索的那个类的属性,我的类名是&#34; comp&#34;

答案 1 :(得分:0)

然后您只需要修改您使用的搜索过滤器:

searchArray = tempArray.filter({$0.compName == searchBarClicked.text!})

编译器告诉您,您无法将$0类型compsearchBarClicked.text String进行比较,因此$0.compName将为String因此可以使用==

答案 2 :(得分:0)

使用此:

searchArray = searchArray.filter{(($0["name"]?.localizedCaseInsensitiveContains(textField.text!)))!}