正文引见了“iOS中nspredict谓词的运用本领是什么”的常识。很多人在本质案例的操纵中会遇到如许的艰巨。让边肖率领你进修怎样处置那些情景。蓄意大师刻意观赏,学点货色!

一 NSPredicate 领会证明

NSPredicate :华文直译谓词用来设置论理牵制的探求或外存中的过滤。

就像语法中的谓词一律,比方[3大于2]中的“大于”是谓词。大略来说,即是一个论理确定,就像一个过滤器。的功效。NSPredicate和[for.][即使.else]那你须要过滤的都有沟通的场合,然而大略比拟一发端机上的运转功效。笔者接洽过【度娘】【谷歌】大略说了一下。然而即使没有找到简直的数据,笔者就不援用了。按照笔者部分的领会,NSPredicate就像一个专车效劳,在手段地下车;[对于.][即使.Else]是一种大众公共汽车效劳,你确定在哪一站下车。所以,NSPredicate具备确定的便当性,而且[对于.][即使.Else]具备更普遍的实用性。

二 NSPredicate 语法证明

//惯例初始化nspredict * pred=[nspredict predict with format : @ . ,];//用一定的东西举行过滤确定,并动作BOOL值归来[predyvaluewithobject :].

//SELF扶助小写,表白被确定的东西。NSNumber * num=@ 999NSPredicate * pred=[NSPredicate PreTewithformat : @ SELF=999 ];if([pred evaluatewithobject : num]){ NSLog(@ % @ ,num);}

//截止打字与印刷999。

普遍很少如许用,由于不像[if.else]。咱们来谈谈NSPredicate的用法。

0. 汇合典型本领证明

NSArray运用谓词:(nsprediate *)供给:-(NSArray *)filter daray。

NSMutableArray运用谓词: (nspredicate *)谓词供给:-(void)filter。

NSSet供给:-(NSSet *)filteredsetsingpredicate :(NSPredicate *)谓词。

NSMutableSet运用谓词: (nspredicate *)谓词供给:-(void)filter。

iOS中NSPredicate谓词的使用方法是什么 第2张

1. 比拟演算符 (以数组举例证明)

开始封装并创造Person类(不该当运用代码)。

//创造Person类数组Person * P0=[Person Person name 3360 @ Zhang shan with ge :20 with sex : @ man ];Person * P1=[Person Person name : @ 韩梅梅 withAge:12 withSex: @ 女子 ];Person * p2=[Person Person name : @ 李雷 with ge :13 with ex : @ man ];Person * P3=[Person Person name : @ XiaoHua with ge :13 with ex : @ woman ];NSArray *arr=@[p0,p1,p2,P3];

/* *比拟演算符*/nspredict * pred=[nspredict predict with format : @ age % @ ,@ 20];NSArray * resultArr=[arr filteredarraysingpredicte : pred];NSLog(@ 年纪小于20 :%@ ,resultArr);pred=[Npredicate PreTewithformat : @ 性别= 女性 年纪=13 ];截止arr=[arr filteredarraysingpredicate : pred];NSLog(@ : %@q的13岁女性@q)。

uot;, resultArr); NSMutableArray *arrayM = [@[@20, @40, @50, @30, @60, @70] mutableCopy];// 不妨用 BETWEEN {30, 50} 包办 // pred = [NSPredicate predicateWithFormat:@ SELF 50 pred = [NSPredicate predicateWithFormat:@ SELF BETWEEN {30, 50} [arrayM filterUsingPredicate:pred]; NSLog(@ 可变数组过滤 : %@ , arrayM);

//截止打字与印刷

年纪小于20   HanMeiMei, 12, woman , LiLei, 13, man , XiaoHua, 13, woman )

年纪为13的女性   XiaoHua, 13, woman )

可变数组过滤 : ( 40, 50, 30)

2. 字符串演算符

BEGINSWITH:查看某个字符串能否以指定的字符串发端(如确定字符串能否以a发端:BEGINSWITH a )

ENDSWITH:查看某个字符串能否以指定的字符串结果

CONTAINS:查看某个字符串能否包括指定的字符串

LIKE:查看某个字符串能否配合指定的字符串沙盘。其之后不妨跟?代办一个字符和代办大肆多个字符两个通配符。比方 name LIKE ac ,这表白name的值中包括ac则归来YES; name LIKE ?ac ,表白name的第2、3个字符为ac时归来YES。

MATCHES:查看某个字符串能否配合指定的正则表白式。固然正则表白式的实行功效是最低的,但其功效是最宏大的,也是咱们最常用的。

注:字符串比拟都是辨别巨细写和重音标记的。如:café和cafe是不一律的,Cafe和cafe也是不一律的。即使蓄意字符串比拟演算不辨别巨细写和重音标记,请在那些演算符后运用[c],[d]选项。个中[c]是不辨别巨细写,[d]是不辨别重音标记,其写在字符串比拟演算符之后,比方:name LIKE[cd] cafe ,那么不管name是cafe、Cafe仍旧café上头的表白式城市归来YES。

举例证明

//创造 Person 类数组 Person *p0 = [Person personName:@ ZhangSan withAge:20 withSex:@ man Person *p1 = [Person personName:@ HanMeiMei withAge:12 withSex:@ woman Person *p2 = [Person personName:@ LiLei withAge:13 withSex:@ man Person *p3 = [Person personName:@ XiaoHua withAge:13 withSex:@ woman NSArray *arr = @[p0, p1, p2, p3];

pred = [NSPredicate predicateWithFormat:@ name LIKE ??an* //名字中第三,四位是 an. resultArr = [arr filteredArrayUsingPredicate:pred]; NSLog(@ 1⃣️ : %@ , resultArr); pred = [NSPredicate predicateWithFormat:@ name LIKE *an* //包括 字符串沙盘an. resultArr = [arr filteredArrayUsingPredicate:pred]; NSLog(@ 2⃣️ : %@ , resultArr); pred = [NSPredicate predicateWithFormat:@ NOT (name CONTAINS ua ) // 不包括 ua. resultArr = [arr filteredArrayUsingPredicate:pred]; NSLog(@ 3⃣️ : %@ , resultArr); pred = [NSPredicate predicateWithFormat:@ name LIKE *ua* NSLog(@ 确定归来bool值 : %d , [pred evaluateWithObject:p3]);

//截止打字与印刷

1⃣️ : ( ZhangSan, 20, man )

2⃣️ : ( ZhangSan, 20, man , HanMeiMei, 12, woman )

3⃣️ : ( ZhangSan, 20, man , HanMeiMei, 12, woman , LiLei, 13, man )

确定归来bool值 : 1

MATCHES 举例

/** 谓词配合正则 */ NSString *phoneStr = @ 15242335566 NSLog(@ 考证 : %d , [self checkPhoneNumber:phoneStr]);

//截止打字与印刷考证 : 1

(BOOL)checkPhoneNumber:(NSString *)phoneNumber{ NSString *regex = @ ^[1][3-8]\\d{9}$ NSPredicate *pred = [NSPredicate predicateWithFormat:@ SELF MATCHES %@ , regex]; return [pred evaluateWithObject:phoneNumber]; // 惟有在正则表白式为^表白式$时才运用谓词,而不是一切情景都运用, 简直证明, 自行察看作品结束参考链接, 作家便不复打开证明}

3. 汇合演算符

ANY、SOME:汇合中大肆一个元素满意前提,就归来YES。

ALL:汇合中一切元素都满意前提,才归来YES。

NONE:汇合中没有任何元素满意前提就归来YES。如:NONE person.age 18,表白person汇合中一切元素的age =18时,才归来YES。

IN:等价于SQL语句中的IN演算符,惟有当左边表白式或值出此刻右边的汇合中才会归来YES。咱们经过一个例子来看一下

举例

iOS中NSPredicate谓词的使用方法是什么 第2张

/** 从第二个数组中去除第一个数组中沟通的元素 */ NSArray *filterArray = @[@ ab , @ abc NSArray *array = @[@ a , @ ab , @ abc , @ abcd pred = [NSPredicate predicateWithFormat:@ NOT (SELF IN %@) , filterArray]; NSLog(@ 去除沟通元素 : %@ , [array filteredArrayUsingPredicate:pred]);

//截止打字与印刷去除沟通元素 : ( a, abcd)

4. 谓词中运用占位符参数

开始即使咱们想在谓词表白式中运用变量,那么咱们须要领会下列两种占位符:

%K:用来动静传入属性名%@:用来动静树立属性值本来十分于变量名与变量值

除此除外,还不妨在谓词表白式中运用动静变换的属性值,就像情况变量一律

NSPredicate *pred = [NSPredicate predicateWithFormat:@ SELF CONTAINS $VALUE

上述表白式中,$VALUE是一个不妨动静变革的值,它本来结果是在字典中的一个key,以是不妨按照你的须要写各别的值,然而必需有$发端,跟着步调变换$VALUE这个谓词表白式的比拟前提就不妨动静变换。

举例

//创造 Person 类数组 Person *p0 = [Person personName:@ ZhangSan withAge:20 withSex:@ man Person *p1 = [Person personName:@ HanMeiMei withAge:12 withSex:@ woman Person *p2 = [Person personName:@ LiLei withAge:13 withSex:@ man Person *p3 = [Person personName:@ XiaoHua withAge:13 withSex:@ woman NSArray *arr = @[p0, p1, p2, p3];

NSString *property = @ name NSString *value = @ LiLei // 该谓词的效率是即使元素中property属性含有值value时就掏出放入新的数组内,这边是name包括LiLei pred = [NSPredicate predicateWithFormat:@ %K CONTAINS %@ , property, value]; NSArray *newArray = [arr filteredArrayUsingPredicate:pred]; NSLog(@ newArray:%@ , newArray); // 创造谓词,属性名改为age,诉求这个age包括$VALUE字符串 NSPredicate *predTemp = [NSPredicate predicateWithFormat:@ %K $VALUE , @ age // 指定$SUBSTR的值为 12 这边解释中的$SUBSTR改为$VALUE NSPredicate *pred1 = [predTemp predicateWithSubstitutionVariables:@{@ VALUE : @12}]; NSArray *newArray1 = [arr filteredArrayUsingPredicate:pred1]; NSLog(@ newArray1:%@ , newArray1); // 窜改 $SUBSTR的值为13, 这边解释中的SUBSTR改为$VALUE NSPredicate *pred2 = [predTemp predicateWithSubstitutionVariables:@{@ VALUE : @13}]; NSArray *newArray2 = [arr filteredArrayUsingPredicate:pred2]; NSLog(@ newArray2:%@ , newArray2);

//截止打字与印刷

newArray:( LiLei, 13, man )

newArray1:( ZhangSan, 20, man , LiLei, 13, man , XiaoHua, 13, woman )

newArray2:( ZhangSan, 20, man )

5. 谓词中保持字

保持字

下列单词都是保持字(不管巨细写)

AND、OR、IN、NOT、ALL、ANY、SOME、NONE、LIKE、CASEINSENSITIVE、CI、MATCHES、CONTAINS、BEGINSWITH、ENDSWITH、BETWEEN、NULL、NIL、SELF、TRUE、YES、FALSE、NO、FIRST、LAST、SIZE、ANYKEY、SUBQUERY、CAST、TRUEPREDICATE、FALSEPREDICATE

注:固然巨细写都不妨,然而更引荐运用小写来表白那些保持字

“iOS中NSPredicate谓词的运用本领是什么”的实质就引见到这边了,感动大师的观赏。即使想领会更多行业关系的常识不妨关心网站,小编将为大师输入更多高品质的适用作品!