我想用一個謂詞來搜索字典對象的數組以獲得字符串值(來自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