世事洞明皆學(xué)問,人情練達(dá)即文章。
? ? ? ?在自己擅長的領(lǐng)域, 每個(gè)人都有超乎尋常的自尊心和自信心,但不要自負(fù)。不同的階段回看一下你擅長的領(lǐng)域,都會(huì)有不同的感悟,所謂“溫故而知新”,誠不欺吾!
自信源于你對(duì)知識(shí)的熟知。熟知了更多的知識(shí),才能更加自信,相輔相成。
? ? ? ?最近一直沒有更新簡書是因?yàn)樵陂_發(fā)和測(cè)試階段,有任務(wù),沒有進(jìn)行學(xué)習(xí),不過在做任務(wù)的時(shí)候也遇到了一些技術(shù)點(diǎn),在這里總結(jié)一下。
? ? ? 今天我們來學(xué)習(xí)一下iOS中謂詞的使用。此文目的有兩個(gè):學(xué)習(xí)謂詞和武裝自己。那我們就開始吧。
? ? ? 1、介紹
? ? ? ?Cocoa提供了一個(gè)名為NSPredicate的類,它用于指定過濾器的條件??梢詣?chuàng)建NSPredicate對(duì)象,通過它準(zhǔn)確的描述所需的條件,通過謂詞篩選每個(gè)對(duì)象,判斷它們是否與條件相匹配。Cocoa用NSPredicate描述查詢的方式,原理類似于在數(shù)據(jù)庫中進(jìn)行查詢,可以在數(shù)據(jù)庫風(fēng)格的API中使用NSPredicate類,比如Core Data和Spotlight。謂詞的作用主要是篩選過濾。
? ? ?2. 基本語法
? ? (1)比較運(yùn)算符
? ? ? 涉及的比較運(yùn)算符有“= , ==,>= , =>,<= , =<,>,<,!=,<>”
? ? ? “ <>”: 判斷左邊表達(dá)式的值是否不相等右邊表達(dá)式的值,和!=是一個(gè)意思。?
? ?(2)集合運(yùn)算符
? ? ? BETWEEN:?必須滿足表達(dá)式 BETWEEN {下限, 上限}的格式,要求該表達(dá)式必須大于或等于下限,并小于或等于上限。
? ? ? IN:?必須滿足表達(dá)式 IN {元素0, 元素1, 元素2...}的格式,要求該表達(dá)式必須包含有{}中的任一元素。
? ? ? ANY , SOME: ? 集合中任意一個(gè)元素滿足條件,就返回YES
? ? ? ALL: ? ?集合所有元素滿足條件,才返回YES
? ? ? NONE:? 集合中沒有任何元素元素滿足條件,就返回YES
? ? (3)邏輯運(yùn)算符
? ? ? ?&& , AND: 邏輯與,要求左右表達(dá)式的值都為YES,結(jié)果才為YES
? ? ? ?|| , OR: 邏輯或,要求只要左右表達(dá)式中有一個(gè)的值都為YES,結(jié)果就為YES
? ? ? ?! , NOT: 邏輯非,對(duì)原有表達(dá)式取反
? ?(4) 字符串間運(yùn)算符
? ? ?BEGINSWITH: ?檢查某個(gè)字符串是否以指定的字符串
? ? ?ENDSWITH:? 檢查某個(gè)字符串是否以指定的字符結(jié)尾
? ? ?CONTAINS: ?檢查某個(gè)字符串是否包含指定的字符串
? ? ?MATCHES:?檢查某個(gè)字符串是否匹配指定的正則表達(dá)式。雖然正則表達(dá)式的執(zhí)行效率是最低的,即計(jì)算開銷非常大,但其功能是最強(qiáng)大的,也是我們最常用的。
? ? ?LIKE: ?檢查某個(gè)字符串是否匹配指定的字符串模板
? ? ? ? ? ? ? ?通配符?代表一個(gè)任意字符
? ? ? ? ? ? ? ?通配符*代表任意多個(gè)字符
注意: 字符串比較都是區(qū)分大小寫和重音符號(hào)的。
如:café和cafe是不一樣的,Cafe和cafe也是不一樣的。如果希望字符串比較運(yùn)算不區(qū)分大小寫和重音符號(hào),請(qǐng)?jiān)谶@些運(yùn)算符后使用[c],[d]選項(xiàng)。其中[c]是不區(qū)分大小寫,[d]是不區(qū)分重音符號(hào),其寫在字符串比較運(yùn)算符之后,比如:name LIKE[cd] 'cafe',那么不論name是cafe、Cafe還是café上面的表達(dá)式都會(huì)返回YES。?? ??
? (5)%K、%@、$VALUE的用法
? ? %K: 字段占位符 (K必須是大寫),用于動(dòng)態(tài)傳入屬性名。
? ? %@: 值占位符,用于動(dòng)態(tài)設(shè)置屬性值,其實(shí)相當(dāng)于變量名與變量值。
? ? $VALUE: VALUE只是一個(gè)普通字符串,當(dāng)做標(biāo)識(shí)使用,可以任意替換,但要統(tǒng)一。$VALUE是一個(gè)可以動(dòng)態(tài)變化的值,它其實(shí)最后是在字典中的一個(gè)key,所以可以根據(jù)你的需要寫不同的值,但是必須有$開頭,隨著程序改變$VALUE這個(gè)謂詞表達(dá)式的比較條件就可以動(dòng)態(tài)改變。
? (6)經(jīng)驗(yàn):1.兩個(gè)數(shù)組求交集,如果按照一般寫法,需要2個(gè)遍歷,但predicate提供了一個(gè)filterUsingPredicate的方法,這樣就可以不用遍歷!2.在存儲(chǔ)自定義對(duì)象的數(shù)組中,可以根據(jù)條件查詢數(shù)組中滿足條件的對(duì)象。這個(gè)可以算作第二點(diǎn)集合運(yùn)算符里面。
說了這么多,我們還是舉個(gè)栗子吧,畢竟舉栗子的效果還是很明顯的:形象、生動(dòng)、具體、活潑。
(1)比較運(yùn)算符的栗子:這里僅僅舉一個(gè)大于的栗子

(2)集合運(yùn)算符:IN和BETWEN

(3)邏輯運(yùn)算符:AND

(4) 字符串間運(yùn)算符:CONTAINS ? ?BEGINSWITH ? ? LIKE

(5)%K、%@、$VALUE的用法
建立student類。student.h文件

student.m文件

viewcontroller.m里面


(6)經(jīng)驗(yàn):1.兩個(gè)數(shù)組求交集,如果按照一般寫法,需要2個(gè)遍歷,但predicate提供了一個(gè)filterUsingPredicate的方法,這樣就可以不用遍歷!2.在存儲(chǔ)自定義對(duì)象的數(shù)組中,可以根據(jù)條件查詢數(shù)組中滿足條件的對(duì)象。

其實(shí)公司和人歷程都一樣,都會(huì)遇到千奇百怪的事情,但是殊途同歸平淡是真,最終都要踏實(shí)篤行。你一步一步地走,你眼看別人起高樓,你眼看別人宴賓客,你也眼看別人樓倒塌。
? ? ? ? ? ?iOS NSPredicate的學(xué)習(xí)講解
? ? ? ? ? ?iOS NSPredicate 謂詞
最后,哪里不對(duì)的地方可以給我留言,我會(huì)及時(shí)改進(jìn)的,謝謝大家。