按对象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() }
SequenceType
的filter()
方法不会将NSPredicate
作为参数,而是closures ,例如
let filteredTableData = sortedLocations.filter { $0.name.localizedCaseInsensitiveContainsString(searchText) }
为每个数组元素调用闭包(这里使用简写参数$0
),并返回true
或false
来指示元素是否包含在过滤结果中。
您可以使用NSPredicate
来过滤NSArray
,看起来像
let filtered = someNSArray.filteredArrayUsingPredicate(predicate)
但如果你有一个Swift数组,没有理由使用它。