我想用一个谓词来搜索字典对象的数组以获得字符串值(来自searchController)。我没有得到任何部分字符串匹配。我需要搜索一个匹配的许多键值,所以我按照下面的代码编写。UISearchController CONTAINS CONTAINS在字典数组中找不到部分结果
我的问题是,如果我搜索:“Orida” 我没有找到:“佛罗里达”
我相信我有这个谓词设置正确......
self.filteredData.removeAll(keepCapacity: false)
let searchPredicate = NSPredicate(format: "SELF CONTAINS[cd] %@", self.searchController.searchBar.text!)
let array = (self.airportData as NSArray).filteredArrayUsingPredicate(searchPredicate)
self.filteredData = array as! [Dictionary<String, String>]
它工作正常如果我键入出现在字典中的任何值精确匹配的字符串,但如果我搜索了部分匹配...
这不是重复后 - 所有关于现有员额这个我发现要么不搜索多个值(比如我的字典中的多个键值),要么在字符串本身上使用contains()方法。
更新
我曾尝试回答以下建议使用过滤器:
let searchPredicate = NSPredicate(format: "SELF CONTAINS[cd] %@", searchController.searchBar.text!)
let array = (self.airportData as NSArray).filteredArrayUsingPredicate(searchPredicate)
self.filteredData = self.airportData.filter({(item: String) -> Bool in
var stringMatch = item.lowercaseString.rangeOfString(self.searchController.searchBar.text!)
return stringMatch != nil ? true : false
我得到以下错误:
'(String) -> Bool' is not convertible to '([String : String]) -> Bool'
我感到困惑如何得到这个正确处理字符串字典。
是什么样子'NSDictionary'在'self.airportData'?他们都拥有相同的钥匙吗? – Larme
@larme他们有不同的钥匙。尽管每个字典都是。目前大约有5个键。 –
Charlie