Swift-谓词(NSPredicate)

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

比较运算符

=、==:判断两个表达式是否相等,在谓词中=和==表示判断,可以设置不同的数据类型:

 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)过滤成功")
        }

其他的基本比较运算符>=,=>,<=,=<,>,<,!=、<>.
BETWEEN:表达式的形式 {下限,上限}的格式,要求该表达式必须大于或等于下限,并小于或等于上限

let data:Int = 5
        let rangePredicate:NSPredicate = NSPredicate(format: " SELF BETWEEN  {1,10}")
        
        if rangePredicate.evaluate(with: data) {
            print("范围--\(data)过滤成功")
        }

逻辑运算符

逻辑与(AND、&&),逻辑或(.OR、||),逻辑非(NOT、 !),基本的数据逻辑操作.

let data:Int = 8
        let dataPredicate:NSPredicate = NSPredicate(format: " SELF > 5 && SELF < 10")
        if dataPredicate.evaluate(with: data) {
            print("逻辑---\(data)过滤成功")
        }

字符串比较运算符

BEGINSWITH 表示字符串是否以指定的字符串开头,ENDSWITH以特定的字符串结尾,CONTAINS包含指定的字符串,LIKE字符串符合匹配模式,MATCHES字符串符合特定的正则表达式.

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)")
        }

集合运算符

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

let inData:String = "Keso"
        let inPredicate:NSPredicate = NSPredicate(format: " SELF IN  {'FlyElephant','Keso'}")
        
        if inPredicate.evaluate(with: inData) {
            print("范围--\(inData)过滤成功")
        }

动态性

NSPredicate的赋值,可以动态的通过字典来设置,VALUE表示需要设置的值,K表示动态设置属性.

let name:String = "FlyElephant"
        var predicate:NSPredicate = NSPredicate(format: " SELF =  $VALUE ")
        predicate = predicate.withSubstitutionVariables(["VALUE":name])
        if predicate.evaluate(with: name) {
            print("name--\(name)过滤成功")
        }
FlyElephant.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容