iOS:常用的谓词

发布时间 2023-04-21 14:12:34作者: dulinshun
func compare(_ predicateString: String, num: Any) -> Bool {
    let predicate = NSPredicate(format: predicateString)
    return predicate.evaluate(with: num)
}

///  比较运算
/// `>`:判定大于
/// `<`: 判定小于
/// `=`: 判定等于
/// `!=` 或 `<>`: 判定不等于
/// `>=` 或 `=>`: 判定左侧大于等于右侧
/// `<=>` 或 `=<`: 判定左侧小于等于右侧
/// `BETWEEN {a, b}`:判定是否介于 a,b 之间
print(compare("SELF > 123", num: 123))  // false
print(compare("SELF < 123", num: 123))  // false
print(compare("SELF = 123", num: 123))  // true
print(compare("SELF != 123", num: 123)) // false
print(compare("SELF <> 123", num: 123)) // false
print(compare("SELF <= 123", num: 123)) // true
print(compare("SELF =< 123", num: 123)) // true
print(compare("SELF BETWEEN {100, 200}", num: 123)) // true

///  逻辑运算
/// `AND` 或 `&&`:逻辑与
/// `OR` 或 `||`:逻辑或
/// `NOT` 或 `!`:逻辑非
print(compare("SELF > 123 && SELF < 124", num: 123))  // false
print(compare("SELF < 123 || SELF > 124", num: 123))  // false
print(compare("! (SELF < 123)", num: 123))  // true

///  字符串比较
/// `BEGINSWITH`:判定开头。
/// `ENDSWITH`:判定结尾。
/// `CONTAINS`:判定包含。
/// `LIKE`:是否匹配字符串模板。eg:SELF LIKE  '*BC*'
/// `MATCHES`:是否匹配指定的正则表达式。
print(compare("SELF BEGINSWITH 'A'", num: "ABCDE"))  // true
print(compare("SELF ENDSWITH 'E'", num: "ABCDE"))  // true
print(compare("SELF CONTAINS 'C'", num: "ABCDE"))  // true
print(compare("SELF LIKE 'ABC*'", num: "ABCDE"))  // true
print(compare("SELF LIKE '*C*'", num: "ABCDE"))  // true

///  集合运算符
/// `ANY`,`SOME`:集合中的任何一个元素满足条件就可以
/// `ALL`:集合中所有元素都满足条件
/// `NONE`:集合中没有任何元素满足条件
/// `IN`:集合中属于另一个集合中的