Swift-谓词(NSPredicate)
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>