• iPhone开发:可爱的谓词,使用NSPredicate


    有点类似与SQL语句,主要功能使用来查找过滤数组,匹配字符串合数值。需要了解一点KVC。

    老老实实跟着apple来吧,先创建一个类Car,代码如下

    #import <Foundation/Foundation.h>

    @interface Car : NSObject {

    NSString *name;

    int power;

    }

    @property (nonatomic,retain) NSString *name;

    @property int power;

    +(id)carWithName:(NSString*)n P:(int)p;

    @end

    #import "Car.h"

    @implementation Car

    @synthesize name,power;

    +(id)carWithName:(NSString*)n P:(int)p{

    Car *c = [[[self alloc] init] autorelease];

    c.name = n;

    c.power = p;

    return c;

    }

    @end

    在使用的时候创建一个大的数组

    NSArray *array = [NSArray arrayWithObjects:

      [Car carWithName:@"m1" P:1],

      [Car carWithName:@"m2" P:2],

      [Car carWithName:@"m3" P:3],

      [Car carWithName:@"m4" P:4],

      [Car carWithName:@"m5" P:5],

      [Car carWithName:@"m6" P:6],

      [Car carWithName:@"m7" P:7],nil


    //我们象找出所有power 在某个范围的车,比如power<6,创建如下Predicate (这里可以用到所有的比较操作符)

    NSPredicate *pre = [NSPredicate predicateWithFormat:@"self.power<6"]; //self可以去掉

    //通过遍历输出我们要的结果

    for (Car *c in array) {

    if ([pre evaluateWithObject:c]) {

    NSLog(@"%@",c.name);

    }

    }


    但是这样做并不能简化我们的代码,我们还需要所有符合条件的集合,过滤器正好解决这一问题

    NSPredicate *pre = [NSPredicate predicateWithFormat:@"self.power<6"];

    NSArray *result = [array filteredArrayUsingPredicate:pre];  //result是我们需要的结果

    如果需要带多个参数,可以使用predicateWithSubstitutionVariables,后面的NSDictionary就是需要的键值对,通过关键字来获取值

    另外可以用BETWEEN,IN,BEGINWITH,ENDWITH,CONTAINS,LIKE这些谓词来构造NSPredicate,必要的时候使用SELF直接对自己进行匹配

  • 相关阅读:
    chrome新版本flash无法在http网站上运行的解决办法
    SSO单点登录三种情况的实现方式详解(转载)
    解决请求筛选模块被配置为拒绝包含的查询字符串过长的请求(原创)
    更改mysql默认字符集 (转载)
    用TextWriterTraceListener实现log文件记录 (转载)
    PO BO VO DTO POJO DAO概念及其作用
    SqlServer 的一个坑
    关于windows服务注册的问题
    原生js的数组除重复
    ES6 箭头函数下的this指向和普通函数的this对比
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/2458476.html
Copyright © 2020-2023  润新知