亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

IOS開發之NSPredicate謂詞的用法

2019-11-14 18:04:23
字體:
來源:轉載
供稿:網友

編程的人員不管是上過大學還是從培訓機構出來的或做后臺的、前端的都應該SQL語句有所了解,我們知道,在SQL語句當中 where 條件表達式可以對二維關系表的數據做條件篩選.微軟的C# .net中也實現了功能能和SQL語句相媲美的技術,它就是List泛型集合的Lambda表達式,支持查找、排序、比較、組合等.在java中雖然沒有在語言中集成對List對象的操作的實現,但是第三方開源庫同樣實現了這一功能.在IOS開發Cocoa框架中提供了一個功能強大的類NSPRedicate,下面來討論一下它的強大之處在哪...
NSPredicate繼承自NSObject,它有兩個派生的子類
• NSComparisonPredicate
• NSCompoundPredicate (子類不是我們今天討論的對象,暫且了解一下就行)
 說到謂詞,我們先來看一下謂詞的語法。
1.比較運算符
* >:大于
* <:小于
* >=:大于等于
* <=:小于等于
* =,==:等于
* !=,<>:不等于

2.邏輯運算符
   *and /&&和
   *or/||或
   *not/!非
3.關系運算符
   *ANY任意,SOME 一些
    *ALL所有元素
    *NONE沒有元素 等同于not any
    *in包含
4.范圍運算符
* between 如,1 BETWEEN { 0 , 33 },或者$INPUT BETWEEN { $LOWER, $UPPER }。
* in包含

4.字符串本身
   *SELF 如:@“self==‘APPLEIOS’”
5.字符串相關
   *contain
    *between
    *endswith
6.like通配符
   * like 如:@"name like[cd] '*ios*'"  
                 @"name" like[cd] 'ios*'"
7.正則表達式matches
     *如:NSString *regex = @"^A.+e$";   //以A開頭,e結尾
        @"name MATCHES %@",regex
8.數組操作
       * array[index]:指定數組中特定索引處的元素。
       *array[first]:制定第一個元素
        *array[last]:制定最后一個元素
        *array[size]:制定數組大小
下面我們再來看一下具體的事例:

 新建一個項目,然后添加類products

Products.h
 1 // 2 //  Products.h 3 //  NSPredicateTest 4 // 5 //  Created by xuhongjiang on 15/10/27. 6 //  Copyright (c) 2015年 xuhongjiang. All rights reserved. 7 // 8  9 #import <Foundation/Foundation.h>10 11 @interface Products : NSObject12 @property NSString *productName;13 @property NSInteger productCount;14 @property NSString *productImageUrl;15 +(id)initProductWithName:(NSString *) name withCount:(NSInteger) count withImage:(NSString *) imageurl;16 @end
Products.m
 1 // 2 //  Products.m 3 //  NSPredicateTest 4 // 5 //  Created by xuhongjiang on 15/10/27. 6 //  Copyright (c) 2015年 xuhongjiang. All rights reserved. 7 // 8  9 #import "Products.h"10 11 @implementation Products12 +(id)initProductWithName:(NSString *)name withCount:(NSInteger)count withImage:(NSString *)imageurl13 {14     Products *sprducts=[[Products alloc] init];15     sprducts.productName=name;16     sprducts.productCount=count;17     sprducts.productImageUrl=imageurl;18     return sprducts;19 }20 -(NSString *)description21 {22     NSString *str=[NSString stringWithFormat:@"產品名稱:%@,數量:%ld,圖片:%@",_productName,_productCount,_productImageUrl];23     return str;24 }25 @end

測試方法:

  1 //  2 //  ViewController.m  3 //  NSPredicateTest  4 //  5 //  Created by xuhongjiang on 15/10/27.  6 //  Copyright (c) 2015年 xuhongjiang. All rights reserved.  7 //  8   9 #import "ViewController.h" 10 #import "Products.h" 11  12 @interface ViewController () 13  14 @end 15  16 @implementation ViewController 17  18 - (void)viewDidLoad { 19     [super viewDidLoad]; 20     [self mainTest]; 21 } 22  23 - (void)didReceiveMemoryWarning { 24     [super didReceiveMemoryWarning]; 25 } 26  27 -(void) mainTest 28 { 29     Products *p1=[Products initProductWithName:@"A蘋果sdasf" withCount:2 withImage:@"464.jpg"]; 30     Products *p2=[Products initProductWithName:@"fsdf橘子gag" withCount:53 withImage:@"fsdfas.jpg"]; 31     Products *p3=[Products initProductWithName:@"dfgdf香蕉" withCount:5 withImage:@"sfas.jpg"]; 32     Products *p4=[Products initProductWithName:@"三星" withCount:76 withImage:@"ggas.jpg"]; 33     Products *p5=[Products initProductWithName:@"華為dfsd" withCount:9 withImage:@"gasa.jpg"]; 34     Products *p6=[Products initProductWithName:@"微軟dhnnne" withCount:6 withImage:@"hshhh.jpg"]; 35     Products *p7=[Products initProductWithName:@"三星" withCount:6 withImage:@"hshhh.jpg"]; 36     Products *p8=[Products initProductWithName:@"15300250500" withCount:6 withImage:@"hshhh.jpg"]; 37  38     NSArray *sproducts=[NSArray arrayWithObjects:p1,p2,p3,p4,p5,p6,p7,nil]; 39      40     //數量小于9  定義謂詞 包含過濾條件 41     NSPredicate *prdicate=[NSPredicate predicateWithFormat:@"productCount<%d",9]; 42     //過濾結果返回新的數組 43     NSArray *newArray=[sproducts filteredArrayUsingPredicate:prdicate]; 44     for (Products *item in newArray) { 45          NSLog(@"newArray=%@",item.productName); 46     } 47     48      49     //數量大于9 并且productname等于“三星jfggg” 定義謂詞 包含過濾條件 50      prdicate=[NSPredicate predicateWithFormat:@"productName='三星' && productCount>9"]; 51     //過濾結果返回新的數組 52      newArray=[sproducts filteredArrayUsingPredicate:prdicate]; 53     for (Products *item in newArray) { 54         NSLog(@"newArray=%@",item.productName); 55     } 56  57     //in(包含) *注意 包含是全字匹配 58     prdicate = [NSPredicate predicateWithFormat:@"productName IN {'g','華為','三星'}||productCount IN {2,5}"]; 59     //過濾結果返回新的數組 60     newArray=[sproducts filteredArrayUsingPredicate:prdicate]; 61     for (Products *item in newArray) { 62         NSLog(@"newArray=%@",item.productName); 63     } 64  65      66     //productName以a開頭的 67     prdicate = [NSPredicate predicateWithFormat:@"productName BEGINSWITH 'A'"]; 68     //productName以ba結尾的 69     prdicate = [NSPredicate predicateWithFormat:@"productName ENDSWITH 'g'"]; 70      71     //name中包含字符a的 72     prdicate = [NSPredicate predicateWithFormat:@"productName CONTAINS 'a'"]; 73      74     //like 匹配任意多個字符 75     //productName中只要有s字符就滿足條件 76     prdicate = [NSPredicate predicateWithFormat:@"productName like '*s*'"]; 77     //?代表一個字符,下面的查詢條件是:name中第二個字符是s的 78     prdicate = [NSPredicate predicateWithFormat:@"productName like '?s*'"]; 79      80     newArray=[sproducts filteredArrayUsingPredicate:prdicate]; 81     for (Products *item in newArray) { 82         NSLog(@"newArray=%@",item.productName); 83     } 84      85     //正則表達式 驗證是否是手機號 86     BOOL isMobileNum=[self isMobileNumber:p8.productName]; 87     if(isMobileNum) 88         NSLog(@"是真確的手機號:%@",p8.productName); 89      90 } 91  92  93 - (BOOL)isMobileNumber:(NSString *)mobileNum 94 { 95     /** 96      * 手機號碼 97      * 移動:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188 98      * 聯通:130,131,132,152,155,156,185,186 99      * 電信:133,1349,153,180,189100      */101     NSString * MOBILE = @"^1(3[0-9]|5[0-35-9]|8[025-9])//d{8}$";102     /**103      10         * 中國移動:China Mobile104      11         * 134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188105      12         */106     NSString * CM = @"^1(34[0-8]|(3[5-9]|5[017-9]|8[278])//d)//d{7}$";107     /**108      15         * 中國聯通:China Unicom109      16         * 130,131,132,152,155,156,185,186110      17         */111     NSString * CU = @"^1(3[0-2]|5[256]|8[56])//d{8}$";112     /**113      20         * 中國電信:China Telecom114      21         * 133,1349,153,180,189115      22         */116     NSString * CT = @"^1((33|53|8[09])[0-9]|349)//d{7}$";117     /**118      25         * 大陸地區固話及小靈通119      26         * 區號:010,020,021,022,023,024,025,027,028,029120      27         * 號碼:七位或八位121      28         */122     // NSString * PHS = @"^0(10|2[0-5789]|//d{3})//d{7,8}$";123     124     NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];125     NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM];126     NSPredicate *regextestcu = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU];127     NSPredicate *regextestct = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT];128     129     if (([regextestmobile evaluateWithObject:mobileNum] == YES)130         || ([regextestcm evaluateWithObject:mobileNum] == YES)131         || ([regextestct evaluateWithObject:mobileNum] == YES)132         || ([regextestcu evaluateWithObject:mobileNum] == YES))133     {134         if([regextestcm evaluateWithObject:mobileNum] == YES) {135             NSLog(@"中國移動");136         } else if([regextestct evaluateWithObject:mobileNum] == YES) {137             NSLog(@"聯通");138         } else if ([regextestcu evaluateWithObject:mobileNum] == YES) {139             NSLog(@"電信");140         } else {141             NSLog(@"Unknow");142         }143         144         return YES;145     }146     else147     {148         return NO;149     }150 }151 @end

1.查詢產品數量小于9的產品

這里的代碼很簡單,第一步創建一個過濾器,用占位符替換數量9,過濾器返回一個新的數組,之后遍歷數組,只取產品名稱。

//數量小于9  定義謂詞 包含過濾條件    NSPredicate *prdicate=[NSPredicate predicateWithFormat:@"productCount<%d",9];    //過濾結果返回新的數組    NSArray *newArray=[sproducts filteredArrayUsingPredicate:prdicate];    for (Products *item in newArray) {         NSLog(@"newArray=%@",item.productName);    }

2.查詢數量大于9 并且productname等于三星jfggg”的產品

//數量大于9 并且productname等于“三星jfggg” 定義謂詞 包含過濾條件     prdicate=[NSPredicate predicateWithFormat:@"productName='三星' && productCount>9"];    //過濾結果返回新的數組     newArray=[sproducts filteredArrayUsingPredicate:prdicate];

3.in包含  (* 包含是全字匹配)

prdicate = [NSPredicate predicateWithFormat:@"productName IN {'g','華為','三星'}||productCount IN {2,5}"];    //過濾結果返回新的數組    newArray=[sproducts filteredArrayUsingPredicate:prdicate];

4.字符串相關處理

//productName以a開頭的    prdicate = [NSPredicate predicateWithFormat:@"productName BEGINSWITH 'A'"];    //productName以ba結尾的    prdicate = [NSPredicate predicateWithFormat:@"productName ENDSWITH 'g'"];        //name中包含字符a的    prdicate = [NSPredicate predicateWithFormat:@"productName CONTAINS 'a'"];

5.like通配符,用于模糊查詢

 //like 匹配任意多個字符    //productName中只要有s字符就滿足條件    prdicate = [NSPredicate predicateWithFormat:@"productName like '*s*'"];    //?代表一個字符,下面的查詢條件是:name中第二個字符是s的    prdicate = [NSPredicate predicateWithFormat:@"productName like '?s*'"];        newArray=[sproducts filteredArrayUsingPredicate:prdicate];

6.正則表達式,例子是驗證是否是手機號

//正則表達式串    NSString * MOBILE = @"^1(3[0-9]|5[0-35-9]|8[025-9])//d{8}$";//創建含有正則表達式的帥選器    NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];//篩選器的evaluateWithObject方法反向驗證是否手機號,返回bool值BOOL isPhoneNum=[regextestmobile evaluateWithObject:@"15300250500"] ;

 

關于謂詞的使用,我們只列舉了幾個常見的用法,它還有很多種靈活的用法,如對時間datetime的間隔篩選、謂詞變量 ”謂詞==$變量名“等,待有時間希望大家去研究。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性xxxx在线播放| 精品国产区一区二区三区在线观看| 精品在线欧美视频| 亚洲成年网站在线观看| 国产中文欧美精品| 亚洲字幕一区二区| 国产一区二区三区网站| 欧美电影在线免费观看网站| 欧美激情免费视频| 日韩69视频在线观看| 国产脚交av在线一区二区| 不卡在线观看电视剧完整版| 欧美极品欧美精品欧美视频| 亚洲国内精品视频| 九九视频这里只有精品| 亚洲老司机av| 8x海外华人永久免费日韩内陆视频| 国产精品大陆在线观看| 日韩高清a**址| 久久久久久999| 亚洲国产精品va在线| 国产日韩av在线播放| 欧美激情精品久久久久久变态| 亚洲香蕉成视频在线观看| 亚洲国产精品一区二区久| 亚洲国产成人久久| 91精品国产综合久久香蕉的用户体验| xxxx性欧美| 日韩在线观看免费高清完整版| 亚洲精品日韩激情在线电影| 久久精品一区中文字幕| 最新国产成人av网站网址麻豆| 久久99精品久久久久久青青91| 欧美一级淫片aaaaaaa视频| 日韩av中文字幕在线播放| 精品人伦一区二区三区蜜桃网站| 日韩av成人在线观看| 久久久久久亚洲| 夜夜嗨av一区二区三区免费区| 国产精品美女午夜av| 亚洲黄页视频免费观看| 亚洲男人第一网站| 欧美在线影院在线视频| 日韩欧美在线观看视频| 伊人久久免费视频| 国产精品在线看| 亚洲网址你懂得| 精品电影在线观看| 久久久久久久电影一区| 91免费看国产| 国产精品免费电影| 一区二区三区国产视频| 欧美成人性色生活仑片| 亚洲欧美国产精品va在线观看| 亚洲久久久久久久久久久| 欧美日韩国产色| 亚洲精品中文字幕有码专区| 午夜免费在线观看精品视频| 一区二区欧美激情| 日韩一区二区欧美| 亚洲国产成人91精品| 91精品国产91久久久久久| 这里只有精品在线播放| 综合国产在线视频| 欧美日韩亚洲精品一区二区三区| 久久69精品久久久久久久电影好| 蜜臀久久99精品久久久无需会员| 97久久精品人人澡人人爽缅北| 欧美一区二区三区……| 国产精品专区h在线观看| 亚洲人成在线播放| 性欧美在线看片a免费观看| 国产精品成人va在线观看| 日本亚洲精品在线观看| 欧美亚洲另类制服自拍| 国产精品久久久久久久久免费看| 日韩欧美福利视频| 情事1991在线| 国产精品福利无圣光在线一区| 精品日韩美女的视频高清| 国产一区二区久久精品| 欧美麻豆久久久久久中文| 久久久久久美女| 久久免费国产精品1| 亚洲成人av在线播放| 欧美综合在线观看| 亚洲精品久久在线| 国产精品永久在线| 久久精视频免费在线久久完整在线看| 亚洲黄页网在线观看| 亚洲免费av电影| 亚洲国产日韩欧美综合久久| 国产欧美日韩精品专区| 亲爱的老师9免费观看全集电视剧| 欧美激情视频在线观看| 97久久精品人人澡人人爽缅北| 日韩av影片在线观看| 88国产精品欧美一区二区三区| 欧美色欧美亚洲高清在线视频| 成人激情电影一区二区| 97视频在线观看成人| 亚洲已满18点击进入在线看片| 国产成人avxxxxx在线看| 97成人超碰免| 国产精品r级在线| 久久久久久国产| 一本一道久久a久久精品逆3p| 狠狠色狠色综合曰曰| 91中文在线视频| 亚洲成人亚洲激情| 精品视频在线观看日韩| 日本久久久久久| 亚洲黄页网在线观看| 91夜夜未满十八勿入爽爽影院| 亚洲欧洲午夜一线一品| 国产69精品久久久久99| 国产美女被下药99| 国产日韩精品在线播放| 日韩久久精品电影| 精品二区三区线观看| 亚洲国产另类 国产精品国产免费| 2019亚洲男人天堂| 亚洲最大成人免费视频| 亚洲精品xxxx| 日本91av在线播放| 久久精品小视频| 国产性色av一区二区| 日韩在线观看网址| 日韩中文字幕精品视频| 欧美激情区在线播放| 国产视频在线观看一区二区| 色偷偷88888欧美精品久久久| 最近2019中文字幕一页二页| 成人国产在线激情| 中文字幕亚洲一区| 91在线网站视频| 精品国内自产拍在线观看| 欧美片一区二区三区| 一区二区三区在线播放欧美| 欧美性猛交xxx| 国产成人精品最新| 国产91精品久久久| 亚洲护士老师的毛茸茸最新章节| 亚洲综合日韩在线| 日本不卡视频在线播放| 日韩欧美国产中文字幕| 97**国产露脸精品国产| 欧美一区二区三区免费观看| 这里只有精品视频| 亚洲成人久久久| 国产成人精彩在线视频九色| 日韩av手机在线观看| 国产在线拍揄自揄视频不卡99| 国产美女91呻吟求| 欧美日韩国产中文精品字幕自在自线| 国产一区二区三区精品久久久| 亚洲自拍另类欧美丝袜| 久久久精品999| 秋霞av国产精品一区| 欧美激情精品久久久久久久变态| 欧美国产日韩xxxxx| 日韩电视剧免费观看网站| 精品久久久久久久久久久久久久| 一区二区日韩精品|