NSPredicate類是用來定義邏輯條件約束的獲取或內存中的過濾搜索.
說白了就是一個過濾條件,比如,"小于4","大于5"之類的.
首先是一個例子,,,在一個裝了很多Person類實例的數組里,用謂詞來過濾年齡小于30的
//年齡小于30
//定義謂詞對象声登,謂詞對象中包含了過濾條件
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age<%d",30];
//使用謂詞條件過濾數組中的元素澄阳,過濾之后返回查詢的結果
NSArray *array = [persons filteredArrayUsingPredicate:predicate];
常用的一些Format的寫法:
//名字等于1且age大于40
@"name = '1' && age>40"
//in包含
@"self.name IN {'1','2','3'} || self.age IN{30,40}"
//name以a開頭
@"name BEGINSWITH 'a'"
//name以ba結尾
@"name ENDSWITH 'ba'"
//name包含字符a
@"name CONTAINS 'a'"
//*表示多個字符,只要有s就可以
@"name like '*s*'"
//?表示一個字符,那么第二個字符必須是s
@"name like '?s'"
更加精細的總結.
1.比較運算符
- =梦鉴、==:判斷兩個表達式是否相等,在謂詞中=和==是相同的意思都是判斷摊唇,而沒有賦值這一說
- ( >=,=> ):判斷左邊表達式的值是否大于或等于右邊表達式的值
- <=,=<:判斷右邊表達式的值是否小于或等于右邊表達式的值
- ( > ):判斷左邊表達式的值是否大于右邊表達式的值
- ( < ):判斷左邊表達式的值是否小于右邊表達式的值
- !=侥祭、<>:判斷兩個表達式是否不相等
- BETWEEN:BETWEEN表達式必須滿足表達式 BETWEEN {下限蓖宦,上限}的格式齐婴,要求該表達式必須大于或等于下限,并小于或等于上限
2.邏輯運算符
- AND稠茂、&&:邏輯與柠偶,要求兩個表達式的值都為YES時,結果才為YES主慰。
- OR嚣州、||:邏輯或,要求其中一個表達式為YES時共螺,結果就是YES
- NOT该肴、 !:邏輯非,對原有的表達式取反
3.字符串比較運算符
- BEGINSWITH:檢查某個字符串是否以指定的字符串開頭(如判斷字符串是否以a開頭:BEGINSWITH 'a')
- ENDSWITH:檢查某個字符串是否以指定的字符串結尾
- CONTAINS:檢查某個字符串是否包含指定的字符串
- LIKE:檢查某個字符串是否匹配指定的字符串模板藐不。其之后可以跟?代表一個字符和代表任意多個字符兩個通配符匀哄。比如"name LIKE 'ac'",這表示name的值中包含ac則返回YES雏蛮;"name LIKE '?ac'"涎嚼,表示name的第2、3個字符為ac時返回YES挑秉。
- MATCHES:檢查某個字符串是否匹配指定的正則表達式法梯。雖然正則表達式的執(zhí)行效率是最低的,但其功能是最強大的,也是我們最常用的立哑。
4.集合運算
- ANY夜惭、SOME:集合中任意一個元素滿足條件,就返回YES铛绰。
- ALL:集合中所有元素都滿足條件诈茧,才返回YES。
- NONE:集合中沒有任何元素滿足條件就返回YES捂掰。如:NONE person.age < 18敢会,表示person集合中所有元素的age>=18時,才返回YES这嚣。
- IN:等價于SQL語句中的IN運算符
5.直接量
- FALSE鸥昏、NO:代表邏輯假
- TRUE、YES:代表邏輯真
- NULL疤苹、NIL:代表空值
- SELF:代表正在被判斷的對象自身
- "string"或'string':代表字符串
- 數組:和c中的寫法相同互广,如:{'one', 'two', 'three'}。
- 數值:包括證書卧土、小數和科學計數法表示的形式
- 十六進制數:0x開頭的數字
- 八進制:0o開頭的數字
- 二進制:0b開頭的數字
6.保留字
下列單詞都是保留字(不論大小寫)
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
實際使用中.謂詞經常配合正則表達式來做一些比如判斷電話號碼,或是郵件地址等等的操作...之后再來說正則表達式吧...