2018-06-27 学习NSPredicate

一.概念

Cocoa提供一个名为NSPredicate的类,用于指定过滤器的条件。可以创建这个对象,通过该对象准确地描述所需的文件,对每个对象通过谓词进行筛选,判断它们是否与条件相匹配。

二.相关样例

Car *car1 = [[Car alloc] init];
[car1 setName: @"Hoben"];
[car1 setHorsePower: 160];

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"name == 'Hoben'"];
BOOL match = [predicate evaluateWithObject: car1];
NSLog(@"%d", match);
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"name == 'Hoben'"];
BOOL match = [predicate evaluateWithObject: car1];
NSLog(@"%d", match);

Car *car2 = [[Car alloc] init];
[car2 setName: @"JP"];
[car2 setHorsePower: 100];

Car *car3 = [[Car alloc] init];
[car3 setName: @"Road"];
[car3 setHorsePower: 200];

NSArray *cars = [[NSArray alloc] initWithObjects: car1, car2, car3, nil];

predicate = [NSPredicate predicateWithFormat: @"horsePower > 150"];
for (Car *car in cars) {
    BOOL matchPower = [predicate evaluateWithObject: car];
    if (matchPower)
        NSLog(@"%@", [car name]);
}

用另一个函数filteredArrayUsingPredicate替代for循环:

NSArray *results;
results = [cars filteredArrayUsingPredicate: predicate];
NSLog(@"%@", results);

以下两句等价:

predicate = [NSPredicate predicateWithFormat: @"horsePower > 150 && horsePower < 170"];
predicate = [NSPredicate predicateWithFormat: @"horsePower BETWEEN {150, 170}"];

使用IN:

predicate = [NSPredicate predicateWithFormat: @"Self.name IN {'Hoben', 'JP'}"];

字符串运算符

字符串运算符中,可以使用BEGINSWITH,CONTAINS,ENDSWITH,后加修饰符[cd]/[c]/[d],分别代表:不区分大小写和发音、不区分大小写、不区分发音

predicate = [NSPredicate predicateWithFormat: @"Self.name BEGINSWITH[cd] 'Ho'"];
predicate = [NSPredicate predicateWithFormat: @"Self.name CONTAINS[c] 'ho'"];
predicate = [NSPredicate predicateWithFormat: @"Self.name ENDSWITH 'ben'"];

可以运用LIKE运算符,*ob*代表包含"ob"的字符串,*??be*代表be前面至少有两个字符。

predicate = [NSPredicate predicateWithFormat: @"Self.name LIKE '*ob*'"];
predicate = [NSPredicate predicateWithFormat: @"Self.name LIKE '*??be*'"];
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 巴霍巴利王改编自印度神话,讲述兄弟间的王位之争以及下一代复仇逆袭的故事,影片非常正能量,节奏紧凑不拖沓,故事情节环...
    我就是我09阅读 4,980评论 0 2
  • 关键词:钓鱼执法题主:女 问:您好,希望这次能被冷大抽中。我老公经常会看3P的片子,特别我们不在一起时,有时在一起...
    冷爱阅读 3,474评论 0 0
  • Git for windows 本文只是自己的一些学习总结,方便自己查看,如果对您阅读不适,抱歉!!! 常用命令(...
    Lxs_597阅读 2,823评论 0 0
  • 0. 前置环境 代码分层结构如下图所示: 1. 创建用户信息的实体 该类是一个entity,对应的是数据库中存储的...
    小孩真笨阅读 5,258评论 1 1
  • "嗡嗡嗡嗡嗡嗡嗡嗡嗡"草原上响彻着奇怪的声音,原来是一只苍蝇在练习自己的飞行技术呢! 在经过一块圆溜溜,粉色...
    小迦QAQ阅读 1,313评论 0 0