在表格视图控制器iOS swift中搜索特定记录
Posted
技术标签:
【中文标题】在表格视图控制器iOS swift中搜索特定记录【英文标题】:search a particular record in table view controller iOS swift 【发布时间】:2017-10-15 19:29:42 【问题描述】:我正在使用 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
那么如何实现搜索栏,出现以下错误。 请帮忙! 这里我的类名是-> comp。 并且 searchArray 是字符串数组和 tempArray 是包含类 obj 的数组
Image of the error
【问题讨论】:
你必须让我们知道你的类型comp
是什么......?所以添加类定义或comp
你好@Ladislav comp 是我的班级名称..class comp var compName : String!
【参考方案1】:
找到了。就是这样 以下是else条件的变化
searchArr = tempArray.filter $0.<classAttribute>.contains(searchText)
searchArray = searchArr as! [comp]
print("search match")
listTableView.reloadData()
这里 searchArr 和 searchArray 和 tempArray 是类类型的数组,& classAttribute 是你要在tableview中搜索的那个类的属性,我的类名是“comp”
【讨论】:
【参考方案2】:那么你只需要修改你使用的搜索过滤器:
searchArray = tempArray.filter($0.compName == searchBarClicked.text!)
编译器告诉您,您无法将 comp
类型的 $0
与 searchBarClicked.text
类型的 String
进行比较,因此 $0.compName
将是 String
,因此可以使用 ==
【讨论】:
我已经尝试过了,但是在.filter上生成了其他错误,说->无法将类型'[comp]'的值分配给类型'[String]'... 请将您的comp
类添加到您的问题和tempArray
中的数据示例【参考方案3】:
使用这个:
searchArray = searchArray.filter(($0["name"]?.localizedCaseInsensitiveContains(textField.text!)))!
【讨论】:
以上是关于在表格视图控制器iOS swift中搜索特定记录的主要内容,如果未能解决你的问题,请参考以下文章
在一个用 JSON 填充的 NSArray 中搜索特定的标题