IOS NSPredicate 查询、搜索

本文介绍了如何利用NSPredicate在iOS开发中实现高效的数据过滤功能。通过具体的代码示例展示了针对字符串数组及自定义模型对象的搜索过程,包括基本的字符串匹配及复杂条件的组合查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


@interface TFCityAddressModel : NSObject

@property (nonatomic, copy) NSString *cityName;

@property (nonatomic, copy) NSString *cityPinYin;

@property (nonatomic, copy) NSString *cityPinYinHead;

@end

@implementation TFCityAddressModel

@end

//单个字符串的查询语句
// [NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] %@",searchBarText];
- (void)testNSPredicate
{
    NSString *searchBarText = @"北京";
    NSArray *_cityAddressArray = @[@"杭州",@"台北",@"北京"];
    NSPredicate *_tfPredicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] %@",searchBarText];
    NSArray *array = [_cityAddressArray filteredArrayUsingPredicate:_tfPredicate];

    for (NSString *cityName in array)
    {
        CHDebugLog(@"testNSPredicate----%@",cityName);
    }
}
结果如下:
CommonDemo[4098:101861] testModelNSPredicate——北京

//model查询语句
- (void)testModelNSPredicate
{
    //NSString *searchBarText = @"北京";
    NSString *searchBarText = @"t";
    NSMutableArray *_cityAddressArray = [[NSMutableArray alloc]init];
    
    TFCityAddressModel *_info = [[TFCityAddressModel alloc]init];
    _info.cityName = @"北京";
    _info.cityPinYin = @"beijing";
    _info.cityPinYinHead = @"b";
    [_cityAddressArray addObject:_info];
    
    TFCityAddressModel *_info1 = [[TFCityAddressModel alloc]init];
    _info1.cityName = @"台北";
    _info1.cityPinYin = @"taibei";
    _info1.cityPinYinHead = @"t";
    [_cityAddressArray addObject:_info1];
    
    TFCityAddressModel *_info2 = [[TFCityAddressModel alloc]init];
    _info2.cityName = @"杭州";
    _info2.cityPinYin = @"hangzhou";
    _info2.cityPinYinHead = @"h";
    [_cityAddressArray addObject:_info2];
    

    NSPredicate *_tfPredicate = [NSPredicate predicateWithFormat:@"(cityName CONTAINS[cd] %@) OR (cityPinYin CONTAINS[cd] %@) OR (cityPinYinHead CONTAINS[cd] %@)", searchBarText, searchBarText, searchBarText];
    NSArray *array = [_cityAddressArray filteredArrayUsingPredicate:_tfPredicate];
    
    for (TFCityAddressModel *_modelInfo in array)
    {
        CHDebugLog(@"testNSPredicate----%@",_modelInfo.cityName);
    }
}
结果如下:
CommonDemo[4098:101861] testModelNSPredicate——北京
CommonDemo[4098:101861] testModelNSPredicate----台北

- (void)testNSPredicateExpression
{
    NSString *regex = @"[A-Za-z]";
    
    //判断a是否属于正则表达式[A-Za-z],若是则正确,否则错误。
    BOOL a = [self isValidateRegularExpression:@"a" byExpression:regex];
    
    if (a)
    {
        CHDebugLog(@"------test testNSPredicateExpression");
    }
}

//是否是有效的正则表达式
- (BOOL)isValidateRegularExpression:(NSString *)strDestination byExpression:(NSString *)strExpression
{
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", strExpression];
    
    return [predicate evaluateWithObject:strDestination];
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值