小斑Swift学习iOS开发

Swift-谓词(NSPredicate)

2017-05-08  本文已影响225人  FlyElephant

NSPredicate定义逻辑条件限制数据搜索和内存中数据过滤.NSPredicate和运算符组合时谓词表达式返回一个Bool值来评估是否满足过滤条件.

比较运算符

=、==:判断两个表达式是否相等,在谓词中=和==表示判断,可以设置不同的数据类型:
<pre><code>` let name:String = "FlyElephant"
let predicate:NSPredicate = NSPredicate(format: " SELF = %@ ", "FlyElephant")

    if predicate.evaluate(with: name) {
        print("name--\(name)过滤成功")
    }
    
    
    let number:Int = 27
    let numPredicate:NSPredicate = NSPredicate(format: " SELF =  %d ", 27)
    
    if numPredicate.evaluate(with: number) {
        print("Number--\(number)过滤成功")
    }`</code></pre>

其他的基本比较运算符>=,=>,<=,=<,>,<,!=、<>.
BETWEEN:表达式的形式 {下限,上限}的格式,要求该表达式必须大于或等于下限,并小于或等于上限
<pre><code>` let data:Int = 5
let rangePredicate:NSPredicate = NSPredicate(format: " SELF BETWEEN {1,10}")

    if rangePredicate.evaluate(with: data) {
        print("范围--\(data)过滤成功")
    }`</code></pre>

逻辑运算符

逻辑与(AND、&&),逻辑或(.OR、||),逻辑非(NOT、 !),基本的数据逻辑操作.
<pre><code>let data:Int = 8 let dataPredicate:NSPredicate = NSPredicate(format: " SELF > 5 && SELF < 10") if dataPredicate.evaluate(with: data) { print("逻辑---\(data)过滤成功") }</code></pre>

字符串比较运算符

BEGINSWITH 表示字符串是否以指定的字符串开头,ENDSWITH以特定的字符串结尾,CONTAINS包含指定的字符串,LIKE字符串符合匹配模式,MATCHES字符串符合特定的正则表达式.
<pre><code>let regex:String = "^[0-9]+$" let matchPredicate:NSPredicate = NSPredicate(format: "SELF MATCHES %@", regex) let data:String = "123456789" if matchPredicate.evaluate(with: data) { print("FlyElephant---字符串---\(data)符合---\(regex)") }</code></pre>

集合运算符

ANY、SOME集合中任意一个元素满足条件,ALL集合中所有元素都满足条件,NONE集合中没有任何元素满足条件,IN等价于SQL语句中的IN运算符,元素在数组之中.

<pre><code>` let inData:String = "Keso"
let inPredicate:NSPredicate = NSPredicate(format: " SELF IN {'FlyElephant','Keso'}")

    if inPredicate.evaluate(with: inData) {
        print("范围--\(inData)过滤成功")
    }`</code></pre>

动态性

NSPredicate的赋值,可以动态的通过字典来设置,$VALUE表示需要设置的值,$K表示动态设置属性.
<pre><code>let name:String = "FlyElephant" var predicate:NSPredicate = NSPredicate(format: " SELF = $VALUE ") predicate = predicate.withSubstitutionVariables(["VALUE":name]) if predicate.evaluate(with: name) { print("name--\(name)过滤成功") }</code></pre>

FlyElephant.png
上一篇下一篇

猜你喜欢

热点阅读