按对象数组过滤 searchController [英] Filter by array of Objects searchController

查看:28
本文介绍了按对象数组过滤 searchController的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个 searchController,因此我试图让它根据 UISearchController 中的文本过滤内容.我创建了一个如下所示的自定义对象.我试过使用 NSPredicate,但不断得到:

I have created an searchController and therefor i'm trying t make it filter content according to the text in the UISearchController. I've created a custom Object looking like below. I've tried using NSPredicate, but keep getting:

无法将 NSPredicate 类型的值转换为预期类型 @noescape(组织)抛出...

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 对象.

Then I have an array called sortedLocations in my ViewController which contains a number of Organization Objects.

到目前为止我尝试过的:

What I've tried so far:

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作为一个参数,但是一个闭包,例如

The filter() method of SequenceType does not take an NSPredicate as an argument, but a closure, e.g.

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

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

The closure is called for each array element (here using the shorthand argument $0) and returns true or false to indicate if the element is to be included in the filtered result or not.

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

You can use an NSPredicate to filter an NSArray, that would look like

let filtered = someNSArray.filteredArrayUsingPredicate(predicate)

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

but there is no reason to use this if you have a Swift array.

这篇关于按对象数组过滤 searchController的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆