華山論劍之iOS NSPredicate(謂詞)的使用(一)

謂詞? 謂詞在我們的iOS開發(fā)過程中是必不可少的,謂詞的作用主要是篩選過濾,提供的數(shù)據(jù)不能滿足我們的需求的時候,我們就需要進行篩選過濾.再說如何使用謂詞之前 我要先說一下在謂詞中能用關(guān)系運算符,當然了我會在下一篇博客中講一下如何進行使用正則表達式和謂詞是如何配合使用的.


1.1 比較運算符

比較運算符就是我們 常用< > = between 這四個的組合.

> : 大于
< : 小于
>= : 大于等于
<= : 小于等于
=,== : 等于
!=,<> : 不等于
between : 左邊的表達式等于右邊的表達式的值或者介于它們之間。右邊是一個有兩個指定上限和下限的數(shù)值的數(shù)列(指定順序的數(shù)列)棘街。比如,1 BETWEEN { 0 , 33 }抑片,或者$INPUT BETWEEN { $LOWER, $UPPER }。

1.2邏輯運算符

對于邏輯運算符,我們主要是與(&&)或(||)非(!)

and/&& : 與
or/|| : 或
not/! : 非

1.3關(guān)系運算符

ANY幌绍,SOME : 指定下列表達式中的任意元素膳犹。比如,ANY children.age < 18铃在。
ALL : 指定下列表達式中的所有元素。比如碍遍,ALL children.age < 18定铜。
NONE :指定下列表達式中沒有的元素。比如怕敬,NONE children.age < 18揣炕。它在邏輯上等于NOT (ANY ...)。
IN :等于SQL的IN操作东跪,左邊的表達必須出現(xiàn)在右邊指定的集合中畸陡。比如鹰溜,name IN { 'Ben', 'Melissa', 'Nick' }。


2.1謂詞的簡單使用

看完上面三種運算符,下面我們就說一下如何進行使用謂詞簡單使用.首先我們先創(chuàng)建一個model,用于我們進行篩選操作.

Student.h中

#import <Foundation/Foundation.h>

@interface Student : NSObject

@property(strong,nonatomic)NSString *name;//姓名

@property(assign,nonatomic)NSInteger age;//年齡

-(instancetype)initWithName:(NSString *)name age:(NSInteger )age;


@end

Studnet.m中

#import "Student.h"

@implementation Student
-(instancetype)initWithName:(NSString *)name age:(NSInteger )age{

    if (self = [super init]) {
        
        self.name  = name;
        
        self.age = age;
        
    }

    return self;

}

@end

我們在ViewController的ViewDidLoad方法中做對應的演示

這里我用的是可變數(shù)組,所以使用方法是- (void)filterUsingPredicate:(NSPredicate *)predicate;
如果是不可變數(shù)組,我們需要使用的方法是帶有返回值的 -(NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate;
//
//  ViewController.m
//  iOS謂詞演示
//
//  Created by songjc on 16/4/24.
//  Copyright ? 2016年 Don9. All rights reserved.
//

#import "ViewController.h"
#import "Student.h"

@interface ViewController ()

@property(strong ,nonatomic)NSMutableArray *oldArray;//原始的數(shù)組


@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    //創(chuàng)建篩選對象
    Student *student1 = [[Student alloc]initWithName:@"棟哥" age:18];
    Student *student2 = [[Student alloc]initWithName:@"強哥" age:17];
    Student *student3 = [[Student alloc]initWithName:@"洋爺" age:20];
    Student *student4 = [[Student alloc]initWithName:@"政哥" age:25];
    Student *student5 = [[Student alloc]initWithName:@"小明" age:13];
    
    //初始化oldArray并且對其進行添加元素
    
    self.oldArray = [NSMutableArray arrayWithObjects:student1,student2,student3,student4,student5, nil];
    
    //初始化謂詞
    /**************************(簡單的運用)**********************************/

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age > 20"];//年齡大于20
    
    [self .oldArray filterUsingPredicate:predicate];
    
    for (Student *student in self.oldArray) {
        NSLog(@"%@",student.name);
    }
    
    /**************************(或的運用)**********************************/
    NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"age > 20 || name == %@",@"棟哥"];//年齡大于20或者名字叫棟哥.

    
    [self .oldArray filterUsingPredicate:predicate1];
    
    for (Student *student in self.oldArray) {
        NSLog(@"%@",student.name);
    }

    /**************************(與的運用)**********************************/

    NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"age < 20 && name == %@",@"棟哥"];//年齡大于20并且名字叫棟哥.
    
    
    [self .oldArray filterUsingPredicate:predicate2];
    
    for (Student *student in self.oldArray) {
        NSLog(@"%@",student.name);
    }
    
    /**************************(非的運用)**********************************/
    
    NSPredicate *predicate3 = [NSPredicate predicateWithFormat:@"name != %@",@"棟哥"];//名字不叫棟哥.
    
    
    [self .oldArray filterUsingPredicate:predicate3];
    
    for (Student *student in self.oldArray) {
        NSLog(@"%@",student.name);
    }


}

@end


大家可以把代碼復制到ViewController看,這樣更加容易,希望我的博客能對您有所幫助.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丁恭,一起剝皮案震驚了整個濱河市曹动,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涩惑,老刑警劉巖仁期,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桑驱,死亡現(xiàn)場離奇詭異竭恬,居然都是意外死亡,警方通過查閱死者的電腦和手機熬的,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門痊硕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人押框,你說我怎么就攤上這事岔绸。” “怎么了橡伞?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵盒揉,是天一觀的道長。 經(jīng)常有香客問我兑徘,道長刚盈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任挂脑,我火速辦了婚禮藕漱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘崭闲。我一直安慰自己肋联,他們只是感情好,可當我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布刁俭。 她就那樣靜靜地躺著橄仍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪牍戚。 梳的紋絲不亂的頭發(fā)上侮繁,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天,我揣著相機與錄音翘魄,去河邊找鬼鼎天。 笑死,一個胖子當著我的面吹牛暑竟,可吹牛的內(nèi)容都是我干的斋射。 我是一名探鬼主播育勺,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼罗岖!你這毒婦竟也來了涧至?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤桑包,失蹤者是張志新(化名)和其女友劉穎南蓬,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哑了,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡赘方,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了弱左。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窄陡。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拆火,靈堂內(nèi)的尸體忽然破棺而出跳夭,到底是詐尸還是另有隱情,我是刑警寧澤们镜,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布币叹,位于F島的核電站,受9級特大地震影響模狭,放射性物質(zhì)發(fā)生泄漏颈抚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一胞皱、第九天 我趴在偏房一處隱蔽的房頂上張望邪意。 院中可真熱鬧,春花似錦反砌、人聲如沸雾鬼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽策菜。三九已至,卻和暖如春酒贬,著一層夾襖步出監(jiān)牢的瞬間又憨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工锭吨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蠢莺,地道東北人。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓零如,卻偏偏與公主長得像躏将,于是被迫代替她去往敵國和親锄弱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 首先祸憋,我們需要知道何謂謂詞会宪,讓我們看看官方的解釋:The NSPredicate class is used to...
    旭日飛揚閱讀 1,526評論 0 0
  • ?建議收藏,用到時候一查就明白了 --xx_cc. 一蚯窥、NSPredicate基本語句 只要我們使用謂詞(NSPr...
    xx_cc閱讀 6,433評論 7 56
  • Bootstrap-table是我目前使用過比好的Web前端表格框架掸鹅,在實際工作也帶了很多的實現(xiàn)便利,關(guān)于B...
    luckydaxian閱讀 9,116評論 0 10
  • 天涼好個秋-李蕭蕭 作詞:大岳 作曲:煙雨憾 編曲:煙雨憾 發(fā)行:上海詩劍文化 那年楓葉紅了的時候 我輕輕牽起你的...
    斗南一岳閱讀 600評論 0 0
  • 其實一直以來我對日本的很多東西都是很反感的拦赠。其中的原因自不用說巍沙。但是當我看到日本著名的作家川端康成寫的散文臨終的...
    15馬玉婷閱讀 555評論 0 1