美文网首页Predicate
NSComparisonPredicate的使用

NSComparisonPredicate的使用

作者: 想聽丿伱說衹愛我 | 来源:发表于2020-09-09 10:08 被阅读0次

版本:iOS13.7

一、简介

NSComparisonPredicate是比较谓词,通过左右两表达式组合来评估对象。
NSComparisonPredicate是NSPredicate的子类,点击NSPredicate的使用查看NSPredicate的用法,以便更容易理解NSComparisonPredicate。
NSComparisonPredicate中使用的NSExpression可点击NSExpression的使用了解。

二、NSComparisonPredicate的API

@interface NSComparisonPredicate : NSPredicate

//创建一个比较谓词实例
//lhs 左表达式 rhs 右表达式
//modifier 修饰语 详见说明1
//type 类型 详见说明2
//options 选项 详见说明3
//例子见例1
+ (NSComparisonPredicate *)predicateWithLeftExpression:(NSExpression *)lhs
                           rightExpression:(NSExpression *)rhs
                           modifier:(NSComparisonPredicateModifier)modifier 
                           type:(NSPredicateOperatorType)type 
                           options:(NSComparisonPredicateOptions)options;
//创建一个比较谓词实例
//lhs 左表达式 rhs 右表达式
//此时type默认为NSCustomSelectorPredicateOperatorType
//selector 选择器
//例子见例2
+ (NSComparisonPredicate *)predicateWithLeftExpression:(NSExpression *)lhs
                           rightExpression:(NSExpression *)rhs
                           customSelector:(SEL)selector;
//创建一个比较谓词实例
//predicateWithLeftExpression:rightExpression:modifier:type:options:的实例初始化方法
- (instancetype)initWithLeftExpression:(NSExpression *)lhs 
                rightExpression:(NSExpression *)rhs 
                modifier:(NSComparisonPredicateModifier)modifier 
                type:(NSPredicateOperatorType)type 
                options:(NSComparisonPredicateOptions)options;
//创建一个比较谓词实例
//predicateWithLeftExpression:rightExpression:customSelector:的实例初始化方法
- (instancetype)initWithLeftExpression:(NSExpression *)lhs 
                rightExpression:(NSExpression *)rhs 
                customSelector:(SEL)selector;
//初始化,一般不使用该方法而使用上面几种
- (nullable instancetype)initWithCoder:(NSCoder *)coder;

//类型 只读 详见说明2
@property (readonly) NSPredicateOperatorType predicateOperatorType;
//修饰语 只读 详见说明1
@property (readonly) NSComparisonPredicateModifier comparisonPredicateModifier;
//左表达式 只读
@property (readonly, retain) NSExpression *leftExpression;
//右表达式 只读
@property (readonly, retain) NSExpression *rightExpression;
//自定义的方法 只读 NSCustomSelectorPredicateOperatorType时才生效
@property (nullable, readonly) SEL customSelector;
//选项 只读 详见说明3
@property (readonly) NSComparisonPredicateOptions options;

@end
  • 说明1
typedef NS_ENUM(NSUInteger, NSComparisonPredicateModifier) {
    //直接进行比较
    NSDirectPredicateModifier = 0,
    //用于评估对象为NSArray、NSSet,当对象的全部元素都符合表达式,才算通过
    NSAllPredicateModifier, 
    //用于评估对象为NSArray、NSSet,当对象的元素至少有一个符合表达式,就算通过
    NSAnyPredicateModifier
};
  • 说明2
typedef NS_ENUM(NSUInteger, NSPredicateOperatorType) {
    NSLessThanPredicateOperatorType = 0, //小于(即左表达式小于右表达式)
    NSLessThanOrEqualToPredicateOperatorType,//小于或等于 
    NSGreaterThanPredicateOperatorType, //大于
    NSGreaterThanOrEqualToPredicateOperatorType, //大于或等于
    NSEqualToPredicateOperatorType, //等于
    NSNotEqualToPredicateOperatorType, //不等于
    NSMatchesPredicateOperatorType,//正则 右表达式为正则表达式
    NSLikePredicateOperatorType,//like匹配,相当于=,但可以使用通配符?和*
    NSBeginsWithPredicateOperatorType,//左表达式以右表达式开头
    NSEndsWithPredicateOperatorType,//左表达式以右表达式结束
    NSInPredicateOperatorType, //左表达式为右表达式的集合元素
    NSCustomSelectorPredicateOperatorType,//通过自定义的方法验证
    NSContainsPredicateOperatorType = 99, //左表达式包含右表达式
    NSBetweenPredicateOperatorType//左表达式在右表达式的范围中 "left BETWEEN { 0 , 33 }"
};
  • 说明3
    若不想指定,可以传0 。
typedef NS_OPTIONS(NSUInteger, NSComparisonPredicateOptions) {
    //大小写不敏感 相当于"left LIKE[c] 'test'" 中的[c]
    NSCaseInsensitivePredicateOption = 0x01,
    //发音不敏感 相当于"left LIKE[d] 'test'" 中的[d]
    NSDiacriticInsensitivePredicateOption = 0x02,
    //表示要比较的字符串已经过预处理;这取代了其他选项,旨在作为性能优化选项
    NSNormalizedPredicateOption  = 0x04, 
};
  • 例1
    NSExpression *left = [NSExpression expressionWithFormat:@"SELF"];
    NSExpression *right = [NSExpression expressionWithFormat:@"%@", @[@"aaa", @"bbb", @"ccc"]];
    NSComparisonPredicate *comparison = [NSComparisonPredicate predicateWithLeftExpression:left 
                rightExpression:right modifier:NSAllPredicateModifier 
                type:NSInPredicateOperatorType options:NSCaseInsensitivePredicateOption];
    NSLog(@"%@", [comparison predicateFormat]);
    BOOL success = [comparison evaluateWithObject:@[@"aaa", @"ccc"]];
    NSLog(@"%@", @(success));
输出:
ALL SELF IN[c] {"aaa", "bbb", "ccc"}
1
  • 例2
    NSExpression *left = [NSExpression expressionWithFormat:@"SELF"];
    NSExpression *right = [NSExpression expressionWithFormat:@"%@", @[@"aaa", @"bbb", @"ccc"]];
    NSComparisonPredicate *selComparison = [NSComparisonPredicate predicateWithLeftExpression:left 
                                rightExpression:right customSelector:@selector(test:)];
    NSLog(@"%@", [selComparison predicateFormat]);
    //当调用该方法时 会调用传入的对象self中的test:方法
    success = [selComparison evaluateWithObject:self];
    NSLog(@"%@", @(success));

- (BOOL)test:(id)object {
    //object为右表达式
    NSLog(@"%@", object);
    return YES;
}

输出:
SELF test: {"aaa", "bbb", "ccc"}
(
    aaa,
    bbb,
    ccc
)
1

可以看出表达式为SELF test: {"aaa", "bbb", "ccc"}
evaluateWithObjec时会调用test:
并将右表达式发送给test:,通过test:的返回的bool值来确定evaluateWithObjec的结果

相关文章

  • NSComparisonPredicate的使用

    版本:iOS13.7 一、简介 NSComparisonPredicate是比较谓词,通过左右两表达式组合来评估对...

  • iconfont的使用(下载使用)

    1、下载文件 2、在生命周期中引入项目 beforeCreate () { var domModule = ...

  • Gson的使用--使用注解

    Gson为了简化序列化和反序列化的过程,提供了很多注解,这些注解大致分为三类,我们一一的介绍一下。 自定义字段的名...

  • 记录使用iframe的使用

    默认记录一下----可以说 这是我第一次使用iframe 之前都没有使用过; 使用方式: 自己开发就用了这几个属...

  • with的使用

    下面例子可以具体说明with如何工作: 运行代码,输出如下

  • this的使用

    什么是this? this是一个关键字,这个关键字总是返回一个对象;简单说,就是返回属性或方法“当前”所在的对象。...

  • this的使用

    JS中this调用有几种情况 一:纯粹的函数调用 这是函数的最通常用法,属于全局性调用,因此this就代表全局对象...

  • ==的使用

    积累日常遇到的编码规范,良好的编码习惯,持续更新。。。 日常使用==用于判断的时候,习惯性将比较值写前面,变量写后...

  • this的使用

    1.默认绑定,就是函数立即执行。 函数立即执行就是指向window,但是如果是node环境,就是指向全局conso...

  • %in% 的使用

    写在前面:From 生信技能书向量难点之一:%in% 难点 (1)== 与 %in% 的区别== 强调位置,x和对...

网友评论

    本文标题:NSComparisonPredicate的使用

    本文链接:https://www.haomeiwen.com/subject/chmjektx.html