NSPredicate 的使用(持续更新)

简介:

NSPredicate

谓词工具一般用于过滤数组数据,也可用来过滤CoreData查询出的数据.

1). 支持keypath

2). 支持正则表达式

 

在使用之前先新建3个类 Teacher Info Address,详细代码如下

Info.h

#import <Foundation/Foundation.h>

@interface Info : NSObject

@property (nonatomic, strong) NSString *classNum;

@end

Info.m
#import "Info.h"

@implementation Info

@end

Address.h
#import <Foundation/Foundation.h>

@interface Address : NSObject

@property (nonatomic, strong) NSString *detailAddress;

@end

Address.m
#import "Address.h"

@implementation Address

@end

Teacher.h
#import <Foundation/Foundation.h>
#import "Info.h"
#import "Address.h"

@interface Teacher : NSObject

@property (nonatomic, strong) NSString   *name;
@property (nonatomic, strong) Info       *info;
@property (nonatomic, strong) Address    *address;
@property (nonatomic, assign) NSInteger   age;

@end

Teacher.m
#import "Teacher.h"

@implementation Teacher

- (instancetype)init
{
    self = [super init];
    if (self) {
     //此处必须初始化以下对象
        _info    = [[Info alloc] init];
        _address = [[Address alloc] init];
    }
    return self;
}

@end

 

初始化数据并添加进数组中

//初始化数据
    Teacher *teacher1 = [[Teacher alloc] init];
    teacher1.info.classNum         = @"11班";
    teacher1.address.detailAddress = @"海淀区";
    teacher1.name                  = @"L.Y.F.";
    teacher1.age                   = 11;
    
    Teacher *teacher2 = [[Teacher alloc] init];
    teacher2.info.classNum         = @"12班";
    teacher2.address.detailAddress = @"立水桥";
    teacher2.name                  = @"P.K.";
    teacher2.age                   = 20;

    Teacher *teacher3 = [[Teacher alloc] init];
    teacher3.info.classNum         = @"11班";
    teacher3.address.detailAddress = @"万盛路";
    teacher3.name                  = @"Y.X.";
    teacher3.age                   = 22;
    
    //将数据添加进数组
    NSMutableArray *teachers =
        [[NSMutableArray alloc] initWithObjects:teacher1, teacher2, teacher3, nil];

开始正式的使用谓词

[1] 比较操作 (>,<,>=,<=,=)

[2] 字符串常规操作 (beginswith,endswith,contains)

    @"name beginswith[cd] 'Y'"
    @"name endswith[cd] 'X.'"
    @"name contains[cd] 'X'"

[3] 范围 (between,in)

    @"age between {10, 20}"
    @"age in {10, 20}" //这个不确定是什么

[4] 通配符 (like)

注:使用?表示一个字符,*表示多个字符

    @"name like[cd] '*X*'"

[5] 逻辑运算 (AND,OR,NOT)

@"age <= 22 AND name like[cd] '*X*'"

[6] 正则表达式

注:^Y.+.$ 以Y开头,以.结尾的字符

    @"self.name matches '^Y.+.$'"

[7] keypath

目录
相关文章
|
6月前
技术好文:UVa414
技术好文:UVa414
30 0
|
API Swift iOS开发
|
机器学习/深度学习 移动开发 JavaScript
iOS小技能:NSPredicate在正则表达式的应用【下篇】
应用案例: 商品分类名称(仅支持数字、字母、中文、斜杠\、横杠",且不能以符号开头)
156 0
iOS小技能:NSPredicate在正则表达式的应用【下篇】
|
编译器 C语言 开发者
拾遗|学习笔记
快速学习拾遗
拾遗|学习笔记
CodeForces 1195C Basketball Exercise (线性DP)
CodeForces 1195C Basketball Exercise (线性DP)
125 0
|
Cloud Native 安全 Go
Excelize 开源五周年 🎉
Go 语言 Excel 文档基础库 Excelize 开源五周年,基础库自 2016 年开源以来已成为云原生应用尤其是 Go 语言开发者在处理电子表格办公文档时的热门选择,正在被广泛应用于大型互联网公司、中小企业客户和初创公司。
233 2
|
SQL 人工智能 自动驾驶
Jeff Dean只是冰山一角!盘点劈柴哥的17个「贤内助」
最近,Business Insider披露了谷歌内部最新的组织结构图,CEO皮采的核心团队成员曝光,其中不仅包括谷歌AI负责人Jeff Dean,还有众多资深高管,一起来看看谷歌这个1.3万亿美元市值的科技巨头的掌舵团队吧。
230 0
Jeff Dean只是冰山一角!盘点劈柴哥的17个「贤内助」
|
Perl 测试技术 Android开发
RxSwift、RxBlocking、RxTest初尝试
在Android开发上,RxJava已经是非常重要的组成之一。最近在用Swift开发iOS应用,考虑在架构设计上使用RxSwift。 添加依赖 # Podfile use_frameworks! target 'YOUR_TARGET_NAME' do pod 'RxSwift', '~...
1773 0
|
前端开发 数据库 关系型数据库
Nancy简单实战之NancyMusicStore(六):写在最后
原文:Nancy简单实战之NancyMusicStore(六):写在最后 前言 由于公司搬家后,住的地方离上班的地方远了N倍,以前是走路十多分钟就可以到公司的,上班时间也从9:00提早到8:30 现在每天上班都是先坐公交,然后再坐地铁,在这段路上比较浪费时间而且每天都是要6:30起床,22:45左右睡觉 保证充足的睡眠,这样才能保证上班有精神。
916 0