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 打?。篵ool2 為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)稱為范圍運算符

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" 打?。篵ool3=false
當(dāng)str3="dd" 打?。篵ool3=true

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

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

打印結(jié)果

當(dāng)str3="da" 打?。篵ool3=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" 打?。篵ool3=false
當(dāng)str3="dd" 打?。篵ool3=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.基本操作符運算

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

打印結(jié)果

當(dāng)num = 20 打?。篺alse
當(dāng)num = 21 打?。簍rue

實際應(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的讀者,請點擊一路平查看

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容