Swift-NSPredicate學(xué)習(xí)整理

Cocoa框架中的NSPredicate用于查詢馍忽,原理和用法都類似于SQL中的where逗宁,作用相當(dāng)于數(shù)據(jù)庫的過濾取

初始化的方式:

  • NSPredicate(format:"")

用法

1.檢索值是否存在一個范圍區(qū)間里

var number2 = 0
var numberPre2 = NSPredicate(format: "SELF BETWEEN{1,5}")
var bool2 = numberPre2.evaluateWithObject(number2)

打印結(jié)果

當(dāng)number2 = 0 打忧亢狻:bool2 為false
當(dāng)number2 = 1 打佣伺琛:bool2 為true

2.檢索數(shù)組元素中是否包含給定字符串

var number2 = "dd"
var numberPre2 = NSPredicate(format: "SELF IN {'dd','bb'}")
var bool2 = numberPre2.evaluateWithObject(number2)

其中出現(xiàn)的關(guān)鍵字
(BETWEEN闪幽、IN)稱為范圍運(yùn)算符

SELF表示的是字符串本身料皇,在本例代碼中相當(dāng)于變量number2

當(dāng)然以數(shù)組的形式初始化NSPredicate也是可以的

var sets = ["dd","ss"]
var numberPre2 = NSPredicate(format: "SELF IN %@",sets)

3.字符串操作相關(guān)

1>判斷字符串中是否包含另一個字符串CONTAINS

var str3 = "dd"
var pre3 = NSPredicate(format: "SELF CONTAINS[cd] %@", str3)
var bool3 = pre3.evaluateWithObject("dsadd")

打印結(jié)果

當(dāng)str3="da" 打游剿伞:bool3=false
當(dāng)str3="dd" 打郁さ怼:bool3=true

2>判斷是否以某個字符串開頭BEGINSWITH

var str3 = "dd"
var pre3 = NSPredicate(format: "SELF BEGINSWITH[cd] %@", str3)
var bool3 = pre3.evaluateWithObject("ddacd")

打印結(jié)果

當(dāng)str3="da" 打印:bool3=false
當(dāng)str3="dd" 打佣痉怠:bool3=true

3>判斷是否以某個字符串結(jié)尾ENDSWITH

var str3 = "dd"
var pre3 = NSPredicate(format: "SELF ENDSWITH[cd] %@", str3)
var bool3 = pre3.evaluateWithObject("dcadd")

打印結(jié)果

當(dāng)str3="da" 打幼饽弧:bool3=false
當(dāng)str3="dd" 打印:bool3=true

注:
[c]不區(qū)分大小寫
[d]不區(qū)分發(fā)音符號即沒有重印符號
[cd]表示即不區(qū)分大小寫拧簸,也不區(qū)分發(fā)音符號

4.模糊查詢LINK通配符

5.正則表達(dá)式MATCHES

//匹配純數(shù)字
var number = "^[0-9]+$"
var numberPre = NSPredicate(format: "SELF MATCHES %@", number)
var boo3 = numberPre.evaluateWithObject("13140000000")

打印結(jié)果為 true

6.基本操作符運(yùn)算

let predicate = NSPredicate(format: "(SELF > 20) AND (SELF < 30)") 
let boo7 = predicate.evaluateWithObject(num)
print(boo7)

打印結(jié)果

當(dāng)num = 20 打泳⑿鳌:false
當(dāng)num = 21 打印:true

實(shí)際應(yīng)用

1.檢索一個數(shù)組中所有包含此字符串的元素盆赤,并返回一個結(jié)果的數(shù)組

let arr4 = ["beijing" , "shanghai" , "guangzhou" , "wuhan"] asNSMutableArray
let str4 = "ang"
let pre4 = NSPredicate(format: "SELF CONtAINS %@", str4)
arr4.filterUsingPredicate(pre4)

打印arr4 結(jié)果為

["shanghai","guangzhou"]

2.判斷字符串首字符是否為字母

let regex1 = "[A-Za-z]+"
let pre5 = NSPredicate(format: "SELF MATCHES %@" , regex1)
let bool5 = pre5.evaluateWithObject("2")

3.字符串替換

//方法調(diào)用需要做異常處理
do{

        let pattern = "(encoding=\")[^\"]+(\")"
        let regex = try NSRegularExpression(pattern:
pattern , options:NSRegularExpressionOptions.CaseInsensitive)
        let sample = "<xml encoding=\"abc\"></xml><xml
encoding=\"def\"></xml><xml encoding=\"ttt\"></xml>"
        print(sample)
        let result = regex.stringByReplacingMatchesInString(sample, options: NSMatchingOptions.ReportProgress, range: NSMakeRange(0, sample.characters.count), withTemplate: "$1utf-8$2")
        print(result)
    }catch{
        print(error) 
    }

打印結(jié)果為

<xml encoding="abc"></xml><xml encoding="def"></xml><xml encoding="ttt"></xml>
<xml encoding="utf-8"></xml><xml encoding="utf-8"></xml><xml encoding="utf-8"></xml>

4.提取字符串

//組裝一個字符串贾富,需要把里面的網(wǎng)址解析出來
//方法調(diào)用需要做異常處理
  do{
        let urlString = "<meta/><link/><title>1Q84BOOK1</title></head><body>"
        let pattern = "(?<=title\\>).*(?=</title)"
        let regex = try NSRegularExpression(pattern: pattern , options: NSRegularExpressionOptions.CaseInsensitive)
        let firstMatch = regex.firstMatchInString(urlString, options: NSMatchingOptions.ReportProgress, range: NSMakeRange(0, urlString.characters.count))
        if firstMatch != nil {
            let resultRange = firstMatch?.rangeAtIndex(0)
            let result = (urlString as NSString).substringWithRange(resultRange!)
            print(result) 
        }
    }catch{
     print(error)
    }    

打印結(jié)果

"1Q84BOOK1"

本文從一路平整理,需要了解OC-NSPredicate的讀者牺六,請點(diǎn)擊一路平查看

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末颤枪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子淑际,更是在濱河造成了極大的恐慌畏纲,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件春缕,死亡現(xiàn)場離奇詭異盗胀,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)锄贼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門票灰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宅荤,你說我怎么就攤上這事屑迂。” “怎么了冯键?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵惹盼,是天一觀的道長。 經(jīng)常有香客問我琼了,道長逻锐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任雕薪,我火速辦了婚禮昧诱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘所袁。我一直安慰自己盏档,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布燥爷。 她就那樣靜靜地躺著蜈亩,像睡著了一般懦窘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上稚配,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天畅涂,我揣著相機(jī)與錄音,去河邊找鬼道川。 笑死午衰,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的冒萄。 我是一名探鬼主播臊岸,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼尊流!你這毒婦竟也來了帅戒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤崖技,失蹤者是張志新(化名)和其女友劉穎逻住,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體响疚,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鄙信,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年瞪醋,在試婚紗的時候發(fā)現(xiàn)自己被綠了忿晕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡银受,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宾巍,到底是詐尸還是另有隱情咕幻,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布顶霞,位于F島的核電站肄程,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏选浑。R本人自食惡果不足惜蓝厌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望古徒。 院中可真熱鬧拓提,春花似錦、人聲如沸隧膘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蹦疑,卻和暖如春西雀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背歉摧。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工蒋搜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人判莉。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓豆挽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親券盅。 傳聞我的和親對象是個殘疾皇子帮哈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

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

  • 基礎(chǔ)命令 主要的命令和快捷鍵 Linux系統(tǒng)命令由三部分組成:cmd + [options]+[operation...
    485b1aca799e閱讀 1,095評論 0 0
  • 最近心情還好還是會有偶爾的小波動,但是過渡下也就好了锰镀。而現(xiàn)在最嚴(yán)重的問題就是拖延癥娘侍,特別恐怖,什么事都會拖延泳炉,每...
    獨(dú)自掙扎的小胖子閱讀 225評論 3 1
  • 這里只想說憾筏,魯山人對于中國菜的判斷。 魯山人號稱最有資格評價日本料理花鹅。其作品中也談?wù)撝袊搜跹?jù)說,魯山人25歲(1...
    haywirehouse閱讀 1,203評論 0 0