文档定义
NSPredicate:A definition of logical conditions used to constrain a search either for a fetch or for in-memory filtering.(逻辑条件的定义,用于限制对访存或内存中过滤的搜索。)
谓词代表逻辑条件,可用于过滤对象集合。 虽然直接从NSComparisonPredicate,NSCompoundPredicate和NSExpression的实例创建谓词是很常见的,但是您通常会根据由NSPredicate上的类方法解析的格式字符串来创建谓词。 谓词格式字符串的示例包括:
1. 简单比较,例如成绩==“ 7”或“ Shaffiq”这样的名字
2. 大小写不敏感的查找,例如名称contains [cd]“ itroen”
3. 逻辑运算,例如(名字,例如“ Mark”)或(姓氏,例如“ Adderley”)
4. 时间范围限制,例如{$ YESTERDAY,$ TOMORROW}之间的日期。
5. 关系条件,例如group.name之类的“ work *”
6. 聚合操作,例如@ sum.items.price <1000
有关完整的语法参考,请参阅《谓词编程指南》。
谓词的创建
谓词字符串解析器对空格不敏感,对关键字不区分大小写,并且支持嵌套的括号表达式。 它还支持printf样式的格式说明符(例如%x和%@)-请参阅格式化字符串对象。 变量用 表 示 ( 例 如 表示(例如 表示(例如 VARIABLE_NAME)-有关更多详细信息,请参见使用谓词模板创建谓词。
predicateFormat 后面的字符串如何设置可以查看 谓词格式字符串语法
解析器不执行任何语义类型检查。 它会尽力而为地创建合适的表达式,但是(尤其是在替换变量的情况下)可能会生成运行时错误。(确保format字符串是正确的,否则会运行时崩溃)
//初始化方法
public convenience init(format predicateFormat: String, _ args: CVarArg...)
例子:
//like[c]是不区分大小写
let pre = NSPredicate.init(format: "(lastName like[c] %@) AND (birthday > %@)", "abc",NSNumber.init(value: 10))
let result = pre.evaluate(with: ["lastName":"abc","birthday":11])
print(result)// true
出来通过固定字符串创建谓词以外,还支持 字符串常量,变量和通配符创建谓词
例子:
let pre = NSPredicate.init(format: