按对象searchController的数组进行过滤

我创build了一个searchController,因此我试图根据UISearchController中的文本来过滤内容。 我已经创build了一个自定义对象,如下所示。 我试过使用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() } 

SequenceTypefilter()方法不会将NSPredicate作为参数,而是closures ,例如

 let filteredTableData = sortedLocations.filter { $0.name.localizedCaseInsensitiveContainsString(searchText) } 

为每个数组元素调用闭包(这里使用简写参数$0 ),并返回truefalse来指示元素是否包含在过滤结果中。


您可以使用NSPredicate来过滤NSArray ,看起来像

 let filtered = someNSArray.filteredArrayUsingPredicate(predicate) 

但如果你有一个Swift数组,没有理由使用它。