我正在尝试搜索从JSON获得的字典数组中的值.我有一个tableViewController
带UISearchResultsUpdating
.我找到了一个包含字符串数组的示例:
func updateSearchResultsForSearchController(searchController: UISearchController)
{
filteredTableData.removeAll(keepCapacity: false)
let searchPredicate = NSPredicate(format: "SELF contains[c] %@", searchController.searchBar.text)
let array = tableData.filteredArrayUsingPredicate(searchPredicate)
filteredTableData = array as! [String]
self.tableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)
我真的不知道如何在数组中进行搜索:
(
{
id = 3;
name = TestNewYork;
},
{
id = 2;
name = TestLA;
},
{
id = 1;
name = TestWashington;
}
)
Run Code Online (Sandbox Code Playgroud)
我tableData = []
也filteredTableData
必须是一个阵列
请帮忙!
您可以使用简单的过滤功能来执行此操作...
tableData : [[String : String]] = ... // your JSON array of String, String dictionaries...
filteredTableData = tableData.filter{
dictionary in
return dictionary["name"] == filterString
}
Run Code Online (Sandbox Code Playgroud)
不管怎么说,还有一段时间不写Swift.
你也可以将它包装在一个函数中......
func filter(array : [[String : String]], byString filterString : String) -> [[String : String]] {
return array.filter{
dictionary in
return dictionary["name"] == filterString
}
}
Run Code Online (Sandbox Code Playgroud)
或者其他的东西.尚未检查代码.如果它不起作用将返回.
在游乐场检查,这工作......
UPDATE
改成了......
let data = [
[
"id" : 3,
"name" : "a"
],
[
"id" : 4,
"name" : "b"
],
[
"id" : 5,
"name" : "c"
]
]
let filteredData = data.filter{
return $0["name"] == "b"
}
Run Code Online (Sandbox Code Playgroud)
它有效.只是无法弄清楚如何包装一个函数.
如果你想匹配单词的开头......
let data = [
[
"id" : 3,
"name" : "Hello"
],
[
"id" : 4,
"name" : "Goodbye"
],
[
"id" : 5,
"name" : "Everybody"
]
]
let filteredData = data.filter{
let string = $0["name"] as! String
return string.hasPrefix("Goo")
}
Run Code Online (Sandbox Code Playgroud)
如果你想要一个包含,你只需要在字符串中进行查找.
再说一遍,我不是在这里.我在游乐场跑步检查......
对于包含搜索,您可以执行此操作...
let filteredData = data.filter{
let string = $0["name"] as! String
return string.rangeOfString("db") != nil
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3842 次 |
最近记录: |