iOS 谓词讲解

时间:2022-09-14 10:48:35
1、NSPredicate

(1)比较运算符

1.比较运算符 > 、< 、== 、 >= 、<= 、 !=

运算符还可以跟逻辑运算符一起使用,&&  ,  || ,AND, OR 谓词不区分大小写

NSPredicate *p = [NSPredicate predicateWithFormat:@"age >= 18 && name = '周周'"];

//根据谓词要求返回响应数组

NSArray * personList = [self.dataList filteredArrayUsingPredicate:p];

//    [self.dataList filterUsingPredicate:p];

(2)范围运算符

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];

(5)     模糊查询

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;

并将button响应事件 放在viewDidLoad中

iOS 谓词讲解的更多相关文章

  1. IOS NSUserDefaults 讲解 用法

    IOS NSUserDefaults 讲解 用法    NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefaults ...

  2. iOS:转载:IOS谓词--NSPredicate

    IOS谓词--NSPredicate 分类: IOS应用2013-02-19 17:24 6792人阅读 评论(1) 收藏 举报 Cocoa 提供了NSPredicate 用于指定过滤条件,谓词是指在 ...

  3. ios - 谓词的使用

    谓词在搜索的时候非常管用.简单示例代码如下: 分类Person.h文件 #import <Foundation/Foundation.h> @interface Person : NSOb ...

  4. IOS 谓词

    // 谓词 Person *person = [[Person alloc]init]; person.name = @"zhang san"; person.age = 20; ...

  5. iOS开发讲解SDWebImage,你真的会用吗?

    SDWebImage作为目前最受欢迎的图片下载第三方框架,使用率很高.但是你真的会用吗?本文接下来将通过例子分析如何合理使用SDWebImage. 使用场景:自定义的UITableViewCell上有 ...

  6. iOS 谓词(NSPredicate)的应用

    Cocoa中谓词(Predicate)提供了一个通用的查询方式处理数据,可以获取和指定数据的过滤形式,Cocoa实际开发中可以是使用NSPredicate及其父类NSComparisonPredica ...

  7. ios 深入讲解iOS键盘一:控制键盘隐藏显示

    在iOS的开发中,我们一般使用UITextField.UITextView处理文字输入等操作,大部分情况下我们只需要一两行代码去手动管理键盘的显示隐藏:让UITextField或UITextView成 ...

  8. ios开发讲解之anchorPoint和position详解

    引言 相信初接触到CALayer的人都会遇到以下几个问题:  为什么修改anchorPoint会移动layer的位置? CALayer的position点是哪一点呢? anchorPoint与posi ...

  9. iOS 多线程讲解2

    1.GCD其他方法 1.GCD应用 单例模式 static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSLog(@&qu ...

随机推荐

  1. JavaScript权威指南 - 数组

    JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...

  2. iOS开发UI篇—核心动画&lpar;关键帧动画&rpar;

    转自:http://www.cnblogs.com/wendingding/p/3801330.html iOS开发UI篇—核心动画(关键帧动画) 一.简单介绍 是CApropertyAnimatio ...

  3. Legolas工业自动化平台案例 —— 水源地自动化监控系统

    天津港爆炸事件后,除了安置群众.追究事故责任外,人们最关心的莫过于爆炸污染物对于周边环境的影响,其中最重要的一块就是饮用水的安全.所幸的是,水源的安全监测是实实在在有据可依的.环保单位和供水企业在建设 ...

  4. 【荐】Redis学习资料汇总

    Redis学习手册(目录) - Stephen_Liu - 博客园 Redis 命令参考 — Redis 命令参考 Redis_php 学习 - 简单--生活 - 博客园

  5. 201521123051《Java程序设计》第十二周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 一 JAVA语言中主要通过流来完成IO操作. 流:计算机的输入输出之间流动的数据序列,也是类的对象.java中 ...

  6. 装饰者模式在JDK和Mybatis中是怎么应用的? java io包

    https://mp.weixin.qq.com/s/-bj71dBylRHRqiPorOpVyg 原创: 李立敏 Java识堂 3月10日 有一个卖煎饼的店铺找上了你,希望你能给她们的店铺开发一个收 ...

  7. HTML&sol;HTML5 Input类型&amp&semi;&amp&semi;表单

    1.HTML 中"不常用"input类型中的属性值: disabled:输入字段禁用: maxlength:输入字段的最大字符长度: readonly:输入字符只读,无法修改: s ...

  8. ZooKeeper系列&lpar;10&rpar;:ZooKeeper与Dubbo的结合

    1. Dubbo的快速讲解 以防有人对Dubbo不了解,快速过一下Dubbo的基本概念,下面简单引用一下官方的介绍 1.1 架构 1.2.角色说明 Provider:暴露服务的提供方 Consumer ...

  9. (原&plus;转)Ubuntu16&period;04软件中心闪退及wifi消失

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6321889.html 参考网址: http://blog.csdn.net/felcon/articl ...

  10. 利用简单的参数传递来实现单条查询的easyui-datagrid

    前一阵子老师给出了一个题目, 说让设计个表格, 学生系统的, 可以查询学生的信息和成绩, 科目自己定, 数据库建表也自己定. 数据库的建表可是建的相当的简陋, 反正老师不是很满意, 后来数据表格做出来 ...