我试图使用NSPredicate获取搜索结果,但是当我尝试使用filteredArrayUsingPredicate时它会发生冲突,因为它返回AnyObject。我已经评论了我尝试的方法,因为它没有返回正确的结果。
var contacts: NSMutableArray = []
var filteredContacts: NSMutableArray = []
func newFilteringPredicateWithText(text: String) -> NSPredicate {
return NSPredicate(format:"SELF contains[cd] %@", text);
}
func contactPickerTextViewDidChange(textViewText: String!) {
if (textViewText == "") {
self.filteredContacts = self.contacts;
}
else {
var predicate: NSPredicate = self.newFilteringPredicateWithText(textViewText)
self.filteredContacts = self.contacts.filteredArrayUsingPredicate(predicate)
//var temp = NSMutableArray(array: self.contacts.filteredArrayUsingPredicate(predicate))
//self.filteredContacts = temp
}
self.tableView.reloadData()
}
答案 0 :(得分:2)
NSMutableArray
和AnyObject
无关,因此您无法轻易预测该类型。
我建议使用原生的Swift解决方案
var contacts: Array<String> = []
var filteredContacts: Array<String> = []
func contactPickerTextViewDidChange(textViewText: String!) {
if textViewText.isEmpty {
filteredContacts = contacts
}
else {
filteredContacts = contacts.filter {$0.rangeOfString(textViewText, options: [.CaseInsensitiveSearch, .DiacriticInsensitiveSearch]) != nil }
}
tableView.reloadData()
}