Objective-C日记-之NSPredicate

时间:2022-10-21 20:39:49

谓语:NSPredicate

1,概述:

用于设置指定的过滤器的条件,通俗的理解就是设置选择的条件,再对指定的对象应用这个条件

2,用法:

a,首先设置谓语。

NSPredicate *predicate=[NSPredicate predicateWithFormat:"name=='Herbie'"];

它将“name=='Herbie'"谓词字符串赋给谓语,如果文本块未使用单引号引用,则为键路径,如果被引用则为文本块。

b,通过某个对象,计算谓语。

BOOL match=[predicate evaluateWithObject:car](此处是计算YES或NO)

或者

设置谓语和计算按以下:

NSPredicate *predicate=[NSPredicate predicateWithFormat:@"engine.horsepower>150";

match=[predicate evaluateWithObject:car];

3,延伸用法

a,对NSArray使用。

NSArray *results;

results=[cars filteredArrayUsingPredicate:predicate];

b, 对NSMutabArray使用与a用法相似。

4,递进用法

a,使用格式说明符。

将条件设置剥离到条件表达式之外。

predicate=[NSPredicate predicateWithFormat:@"engine.horsepower> %d",150];

predicate=[NSPredicate predicateWithFormat:@"name==%@",@"Herbie"];这里如果要使用%@作为等号后面的条件,则应使用@"name=='%@'",@"Herbie"

b,将变量名放入字符串字典中,类似于环境变量

首先构造临时谓词:predicateTemplate=[NSPredicate predicateWithFormat:@"name==$NAME"];

再构造构造一个字典:NSDictionary *varDict=[NSDictionary dictionaryWithObjectAndKeys:

                  @"Herbie",@"NAME",nil]

再构造新谓词:predicate=[predicateTemplate predicateWithSubstitutionVariables:varDict];

或者如下:

predicateTemplate=[NSPredicate predicateWithFormat:@engine.horsepower > $POWER"];

NSDictionary *varDict=[NSDictionary dictionaryWithObjectAndKeys:

        [NSNumber numberWithInt:150],@"POWER",nil];

predicate=[predicateTemplate predicateWithSubstitutionVariables:varDict];

c,使用运算符

c1,比较和逻辑运算符>,>=,=>,<=,<,<=,=<,!=,<>,(),AND,OR,NOT,&&,||,!

predicate=[NSPredicate predicateWithFormat:@"(engine.horsepower>50) AND (engine.horsepower <200)"];

results=[cars filterdArrayUsingPredicate:predicate];

c2,数组运算符BETWEEN,IN

NSArray *betweens=[NSArray arrayWithObject:

          [NSNumberWithInt:50]

          [NSNumberWithInt:200],nil];

predicate=[NSPredicate predicateWithFormat:

        @"engine.horsepower BETWEEN %@",betweens];

也可以将前面的环境变量的方法运用进来。

c3,将某个字符串数组作为谓语来使用(使用SELF)。

比如,我有一个字符串数组:{"Herbie","Snugs","Badger","Flap"},要将其作为条件在cars.name中查找。

NSArray *names=[cars valueForKey:@"name"];

NSPredicate *predicate=[NSPredicate predicateWithFormat:

              @"SELF IN {'Herbie','Snugs','Badger','Flap'}];

results=[names filteredArrayUsingPredicate:predicate];

谨记这句话:SELF可以引用用于谓词计算的对像。如下:

NSArray *names1=[NSArray arrayWithObjects:

      @"Herbie",@"Badger",@"Judge",@"Elvis",nil];

NSArray *names2=[NSArray arrayWithObjects:

      @"Judge",@"Paper Car",@"Badger",@"Finto",nil];

predicate=[NSPredicate predicateWithFormat:@"SELF IN %@",name1];

results=[names2 filteredArrayUsingPredicate:predicate];

c4,字符串运算符

BEGINWITH,ENDWITH,CONTAINS,

例如使用"name BEGINSWITH 'Bad'"匹配"Badger"

通常还会有修饰符[c]不区分大小写,[d]不区分发音符号,[cd]既不区分大小写,也不区分发音符号,如:

"name BEGINSWITH[cd] 'HERB'"

c5,LIKE运算符

如谓词字符串:"name LIKE '*er*'","name LIKE '???er*'"

c6,MATCHS运算符

主要是使用正则表达式,但是计算的开销很大。

Objective-C日记-之NSPredicate的更多相关文章

  1. Automake

    Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...

  2. objective-c中使用cocoa的NSPredicate&comma;谓词(十四)

    holydancer原创,如需转载,请在显要位置注明: 转自holydancer的CSDN专栏,原文地址:http://blog.csdn.net/holydancer/article/details ...

  3. &lbrack;Proposal&rsqb;Nano-Diary&lpar;纳日记&rpar;

    [Motivation] 很多人都有记日记的习惯,不为别的,就为了那份情怀.但是也有很多人不记日记,原因是嫌写字麻烦.记得很久很久以前,在<读者>上读过一篇文章,大意是一个人用数值记下每天 ...

  4. 微信小程序开发日记——高仿知乎日报(下)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...

  5. 微信小程序开发日记——高仿知乎日报(中)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该教 ...

  6. 微信小程序开发日记——高仿知乎日报(上)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...

  7. Linux学习日记-使用EF6 Code First&lpar;四&rpar;

    一.在linux上使用EF 开发环境 VS2013+mono 3.10.0 +EF 6.1.0 先检测一下EF是不是6的 如果不是  请参阅 Linux学习日记-EF6的安装升级(三) 由于我的数据库 ...

  8. NSPredicate 的使用

    NSPredicate是什么? NSPredicate 是预测的意思 但是我们常翻译成谓词 它可以干什么? 使用NSPredicate可以定义模糊查询条件 根据一定的条件 我们就可以从一个数组中快速找 ...

  9. Objective C中的ARC的修饰符的使用---- 学习笔记九

    #import <Foundation/Foundation.h> @interface Test : NSObject /** * 默认的就是__strong,这里只是做示范,实际使用时 ...

随机推荐

  1. 认识 EXT2 文件系统

    认识ext文件系统 硬盘组成与分割 文件系统特性 Linux 的 EXT2 文件系统(inode) 与目录树的关系 EXT2/EXT3 文件的存取与日志式文件系统的功能 Linux 文件系统的运行 挂 ...

  2. 应用程序缓存--manifest

    应用程序缓存(Application Cache)为应用带来三个优势: 离线浏览 - 用户可在应用离线时使用它们 速度 - 已缓存资源加载得更快 减少服务器负载 - 浏览器将只从服务器下载更新过或更改 ...

  3. ecshop show&lowbar;message

    格式lib_main.php show_message(内容, array(返回列表,继续编辑), array(连接地址一,链接地址二, 'info',false); true:自动跳转 输出: fu ...

  4. mysql 启动错误

    错误提示如下: 150815 20:24:40 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended150815 20:2 ...

  5. 让ecshop编辑器功能更强大

    ecshop后台的商品编辑和文章编辑使用的是FCKEDITOR 编辑器, 这个FCKEDITOR的工具条(toolbar)是可以自定义的,ECSHOP默认使用的是 normal ,属于中档功能, 下面 ...

  6. 解析XtraBackup备份MySQL的原理和过程(转)

    原文:http://ourlinux.blog.51cto.com/274624/844859 XtraBackup是percona公司提供的开源工具,以热备Innodb表著称而被广泛采用. Xtra ...

  7. 浏览器阻止window&period;open的解决方案

    先分析一下浏览器为什么会阻止window.open吧:用户主动去触发事件的浏览器不会阻止,什么是用户主动触发的呢?就是当用户去点击的一瞬间就弹出这种浏览器是不会阻止的,如果是通过setTimeout定 ...

  8. Zeppelin0&period;6&period;2使用hive解释器

    Zeppelin0.6.2的jdbc Interpreter 配置 1.拷贝hive的配置文件hive-site.xml到zeppelin-0.6.2-bin-all/conf下. 2.进入conf下 ...

  9. Java Socket应用---通信是这样练成的

    网络基础简介 Java 中网络相关 API 的应用     Java 中的 InetAddress 的应用   Test01.java package com.imooc; import java.n ...

  10. asp&period;net动态网站repeater控件使用及分页操作介绍

    asp.net动态网站repeater控件使用及分页操作介绍 1.简单介绍 Repeater 控件是一个容器控件,可用于从网页的任何可用数据中创建自定义列表.Repeater 控件没有自己内置的呈现功 ...