按对象数组filterController过滤

时间:2015-09-24 17:15:47

标签: ios swift uisearchcontroller

我创建了一个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()
}

1 个答案:

答案 0 :(得分:5)

filter()的{​​{1}}方法不会SequenceType 作为参数,但闭包,例如

NSPredicate

为每个数组元素调用闭包(这里使用简写 参数let filteredTableData = sortedLocations.filter { $0.name.localizedCaseInsensitiveContainsString(searchText) } )并返回$0true以指示元素 是否包含在过滤结果中。

您可以使用false过滤NSPredicate

NSArray

但如果您有Swift数组,则没有理由使用它。