如何在swift 3中过滤UISearchBar中的数组模型
Posted
技术标签:
【中文标题】如何在swift 3中过滤UISearchBar中的数组模型【英文标题】:how to filter array model inside UISearchBar in swift 3 【发布时间】:2018-04-13 06:58:39 【问题描述】:我有一个这样的数组模型:
class Assess_order_med_model
var name:String!
var id:String!
init(name:String!,id:String!)
self.name = name
self.id = id
我想根据“id”过滤我的数组。为此我正在这样做。
var filteredData = [Assess_order_med_model]()
override func viewDidLoad()
super.viewDidLoad()
table_View.dataSource = self
table_View.delegate = self
searchBar.delegate = self
searchBar.showsCancelButton = false
self.table_View.allowsSelection = false
let array_vale1 = Assess_order_med_model.init(name: "New York, NY", id: "1")
self.array_model.append(array_vale1)
filteredData = array_model
现在我正在像这样过滤我的数组
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String)
filteredData = searchText.isEmpty ? array_model : array_model.filter((dataString: String) -> Bool in
// If dataItem matches the searchText, return true to include it
return dataString.range(of: searchText, options: .caseInsensitive) != nil
)
table_View.reloadData()
但它给了我这样的错误:Assess_order_model 类型的值没有成员范围。 任何人都可以帮助我在过滤时做错了什么吗?
【问题讨论】:
如果您正在搜索名称,您可以这样做:array_model.filter $0.name.contains(searchStr)
。如果您正在寻找基于id
的搜索/过滤器,那么您也可以像这样过滤,只需使用$0.id
【参考方案1】:
您的array_model
包含对象Assess_order_med_model
,如下更改您的textDidChange searchText
,
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String)
let searchString = searchText.trimWhiteSpace()
if searchString != "", searchString.count > 0
let filterData = array_model.filter
return $0.id?.range(of: searchString, options: .caseInsensitive) != nil
这是trimWhiteSpace
的通用方法,
extension String
func trimWhiteSpace() -> String
let string = self.trimmingCharacters(in: .whitespacesAndNewlines)
return string
【讨论】:
Thanx @ppl 您的代码运行良好。由于一些小错误,我已将您的代码更改为这样。func searchBar(_ searchBar:UISearchBar,textDidChange searchText:String)让searchString = searchText.trimWhiteSpace()filteredData = searchString.isEmpty? array_model : array_model.filter return $0.name?.range(of: searchString, options: .caseInsensitive) != nil table_View.reloadData() 我遇到了与过滤相关的问题...例如,如果我输入“new”,它会显示结果,但是当我删除像“ne”这样的 1 个字符时,它并没有引用 tableview 列表 你得到了什么搜索文本? 一旦我搜索了一些内容,它就会显示结果,但是当我在搜索栏列表中重新输入内容时,它并没有刷新。 首先,在长代码结构的情况下,请使用if else条件以上是关于如何在swift 3中过滤UISearchBar中的数组模型的主要内容,如果未能解决你的问题,请参考以下文章
UISearchbar 在 Swift 4 中使用 UItextfield
UISearchbar 并在查看控制器 xcode swift 中传递数据
Swift 2.0 - UISearchBar 取消按钮不删除 searchBar 内容