我创建了一个searchController,因此我试图根据UISearchController中的文本过滤内容。我创建了一个自定义对象,如下所示。我尝试过使用NSPredicate,但一直在努力:
cannot convert value of type NSPredicate to expected type @noescape (organization) throws...
class Organization: Object {
var id: Int = 0
var name: String = ""
var shortName: String = ""
var image: NSData = NSData()
var pinImage: NSData = NSData()
let locations = List<Location>()
}
然后我的ViewController中有一个名为sortedLocations
的数组,其中包含许多Organization
个对象。
到目前为止我尝试过:
func updateSearchResultsForSearchController(searchController: UISearchController)
{
filteredTableData.removeAll(keepCapacity: false)
let searchPredicate = NSPredicate(format: "SELF.name CONTAINS[c] %@", searchController.searchBar.text!)
let array = sortedLocations.filter(searchPredicate)
filteredTableData = array as! [Organization]
self.tableView.reloadData()
}
答案 0 :(得分:5)
filter()
的{{1}}方法不会SequenceType
作为参数,但闭包,例如
NSPredicate
为每个数组元素调用闭包(这里使用简写
参数let filteredTableData = sortedLocations.filter {
$0.name.localizedCaseInsensitiveContainsString(searchText)
}
)并返回$0
或true
以指示元素
是否包含在过滤结果中。
您可以使用false
过滤NSPredicate
像
NSArray
但如果您有Swift数组,则没有理由使用它。