iOS NSPredicate的學習講解

來源:互聯網
上載者:User

標籤:

  iOS Predicate 即謂詞邏輯。和資料庫的SQL語句具有相似性,都是從資料堆中根據條件進行篩選。

1.使用情境:        

       (1)NSPredicate給我留下最深印象的是兩個數組求交集的一個需求,如果按照一般寫法,需要2個遍曆,但NSArray提供了一個filterUsingPredicate的方法,用了NSPredicate,就可以不用遍曆!

       (2)在儲存自訂對象的數組中,可以根據條件查詢數組中滿足條件的對象。

2.首先熟悉Predicate:

NSArray *array1 = [NSArray arrayWithObjects:@1,@2,@3,@5,@5,@6,@7, nil];

NSArray *array2 = [NSArray arrayWithObjects:@4,@5, nil];

// 表示篩選array1在array2中的元素!YES!其中SELF指向filteredArrayUsingPredicate的調用者。

/*測試方案:

NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"SELF  in %@",array2];

NSArray *temp1 = [array1 filteredArrayUsingPredicate:predicate1];

//表示array1在array2中元素

結果:

2015-11-08 10:55:19.879 NSPredicateDemo[11595:166012] obj ==5

2015-11-08 10:55:19.879 NSPredicateDemo[11595:166012] obj ==5

 

NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"SELF  in %@",array1];

NSArray *temp1 = [array2 filteredArrayUsingPredicate:predicate1];

結果:

2015-11-08 10:55:19.879 NSPredicateDemo[11595:166012] obj ==5

*/

NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"SELF  in %@",array2];

NSArray *temp1 = [array1 filteredArrayUsingPredicate:predicate1];

[temp1 enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

NSLog(@"temp1 = %@",obj);

}];

/*

2015-11-08 10:55:19.879 NSPredicateDemo[11595:166012] obj ==5

2015-11-08 10:55:19.879 NSPredicateDemo[11595:166012] obj ==5

*/

 

3.基本文法

(1)比較子>,<,==,>=,<=,!=

可用於數值及字串


 

(2)範圍運算子:IN、BETWEEN

例:@"number BETWEEN {1,5}"

@"address IN {‘shanghai‘,‘beijing‘}"

 


 

(3)字串本身:SELF

例:@“SELF == ‘APPLE’"

 


 

(4)字串相關:BEGINSWITH、ENDSWITH、CONTAINS

例:@"name CONTAIN[cd] ‘ang‘"  //包含某個字串

@"name BEGINSWITH[c] ‘sh‘"    //以某個字串開頭

@"name ENDSWITH[d] ‘ang‘"      //以某個字串結束

注:[c]不區分大小寫[d]不區分發音符號即沒有重音符號[cd]既不區分大小寫,也不區分發音符號。


 

(5)萬用字元:LIKE

例:@"name LIKE[cd] ‘*er*‘"    //*代表萬用字元,Like也接受[cd].

@"name LIKE[cd] ‘???er*‘"

 


 

 



文/九零猴VS久林(簡書作者)
原文連結:http://www.jianshu.com/p/b2694972863e
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。

iOS 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.