(1)比较运算符
1.比较运算符 > 、< 、== 、 >= 、<= 、 !=
运算符还可以跟逻辑运算符一起使用,&& , || ,AND, OR 谓词不区分大小写
NSPredicate *p = [NSPredicate predicateWithFormat:@"age >= 18 && name = '周周'"];
//根据谓词要求返回响应数组
NSArray * personList = [self.dataList filteredArrayUsingPredicate:p];
// [self.dataList filterUsingPredicate:p];
IN:等于SQL的IN操作,左边的表达必须出现在右边指定的集合中。
BETWEEN:左边的表达式等于右边的表达式的值或者介于它们之间,右边是一个有两个指定上限和下限的数值的数列(指定顺序的数列)
NSPredicate * p = [NSPredicate predicateWithFormat:@"age BETWEEN {30,60}"];
NSArray * personList = [self.dataList filteredArrayUsingPredicate:p];
(3)头尾查询
以xx开头 --BEGINSWITH
以xx结尾 --ENDSWITH
NSPredicate * p = [NSPredicate predicateWithFormat:@"name BEGINSWITH '大' || name ENDSWITH %@",@"露"];
NSArray * personList = [self.dataList filteredArrayUsingPredicate:p];
(4)包含查询
包含CONTAINS:左边的表达式包含右边的表达式。
NSPredicate * p = [NSPredicate predicateWithFormat:@"%K CONTAINS %@",@"name",@"欢”];
NSPredicate * p = [NSPredicate predicateWithFormat:@"%K CONTAINS '欢'",@"name"];
NSArray * personList = [self.dataList filteredArrayUsingPredicate:p];
LIKE:左边的表达式等于右边的表达式
*表示零个或多个字符
?表示一个字符
// NSPredicate * p = [NSPredicate predicateWithFormat:@"name LIKE '*欢*'"];
NSPredicate * p = [NSPredicate predicateWithFormat:@"name LIKE '?欢*'"];
NSArray * personList = [self.dataList filteredArrayUsingPredicate:p];
(6)字符串本身查询
//字符串本身查询,数组里的每一项是字符串,才能用SELF查询
NSArray * names = @[@"大欢",@"周周",@"露露",@"饭饭",@"欢哥"];
// NSPredicate * p = [NSPredicate predicateWithFormat:@"SELF = '大欢'"];
NSPredicate * p = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@",@"欢"];
NSArray * personList = [names filteredArrayUsingPredicate:p];
(7)正则表达式:MATCHES
NSString *pattern = @"^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$";
NSPredicate * p = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",pattern];
//传入对象是否匹配正则表达式的谓词
BOOL isTelNumber = [p evaluateWithObject:@"118260930"];
if (isTelNumber) {
NSLog(@"是手机号");
} else {
NSLog(@"不是手机号");
}
2、UISearchController搜索控制器
(1)第一种形式
//创建一个接受结果并展示的表格控制器
SearchResultViewController * resultVC = [[SearchResultViewController alloc] initWithStyle:UITableViewStylePlain];
//创建搜索控制器
UISearchController * searchVC = [[UISearchController alloc] initWithSearchResultsController:resultVC];
//设置数据更新代理
searchVC.searchResultsUpdater = self;
//使用模态视图跳转到搜索控制器
[self presentViewController:searchVC animated:YES completion:nil];
//通过searchBar得到输入的文字
NSString * searchString = searchController.searchBar.text;
//过滤搜索内容
[self updateFilterContent:searchString];
//self.resultList已经有搜索到的值了
//判断是否searchController存在searchResultsController
if (searchController.searchResultsController) {
//通过searchResultsController得到SearchResultViewController的引用
SearchResultViewController * searchResultVC = (SearchResultViewController *)searchController.searchResultsController;
//给搜索结果控制器赋数据源
searchResultVC.searchResults = self.resultList;
//将搜索结果控制器刷新表格
[searchResultVC.tableView reloadData];
- (void)updateFilterContent:(NSString *)searchString {
//[c] 不区分大小写
NSPredicate * p = [NSPredicate predicateWithFormat:@"SELF CONTAINS[c] %@",searchString];
self.resultList = [self.dataList filteredArrayUsingPredicate:p];
}
(2)第二种形式
#warning 一定要将UISearchController对象设置成全局变量
self.tableView.tableHeaderView = self.searchVC.searchBar;