按对象数组过滤 searchController [英] Filter by array of Objects 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()
}
推荐答案
SequenceType
的 filter()
方法不接受 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
) 并返回 true
或 false
以指示元素是否是否包含在过滤结果中.
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屋!