Pet*_*Pik 3 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>()
}
Run Code Online (Sandbox Code Playgroud)
然后,我sortedLocations在ViewController中调用了一个数组,其中包含许多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()
}
Run Code Online (Sandbox Code Playgroud)
的filter()方法SequenceType不使用a NSPredicate
作为参数,而是使用闭包,例如
let filteredTableData = sortedLocations.filter {
$0.name.localizedCaseInsensitiveContainsString(searchText)
}
Run Code Online (Sandbox Code Playgroud)
将为每个数组元素调用该闭包(此处使用shorthand参数$0),并返回true或false指示该元素是否要包含在过滤结果中。
您可以使用NSPredicate过滤NSArray,看起来像
let filtered = someNSArray.filteredArrayUsingPredicate(predicate)
Run Code Online (Sandbox Code Playgroud)
但是如果您有Swift数组,则没有理由使用它。
| 归档时间: |
|
| 查看次数: |
557 次 |
| 最近记录: |