Objective-C日記-之NSPredicate

來源:互聯網
上載者:User

標籤:

謂語: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運算子

主要是使用Regex,但是計算的開銷很大。

Objective-C日記-之NSPredicate

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.