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的赋值,可以动态的通过字典来设置,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)过滤成功")
}