NSPredicate - 带参数的动态谓词

Posted

技术标签:

【中文标题】NSPredicate - 带参数的动态谓词【英文标题】:NSPredicate - Dynamic predicate with arguments 【发布时间】:2014-03-28 10:29:38 【问题描述】:

我是 NSPredicates 的新手,但我知道基础知识。

这就是我的谓词现在的样子:

[NSPredicate predicateWithFormat:@"name contains[c] %@", searchText];

我想做的是能够创建这样的谓词(伪代码):

NSPredicate *myPredicate = [NSPredicate predicateWithBaseString:@"name contains[c] _ARGUMENT_"];

然后在例如循环中使用它(伪代码):

for(NSString *searchString in self.allStrings)

    NSPredicate *myNewPredicate = [myPredicate predicateWithArgument:searchString];
    //Here I do the searchOperations with my new predicate

我想这样做,以便我可以有一些基本谓词,然后在它们上放置参数以进行搜索。我不想再次创建我的谓词。

希望你能理解。

谢谢!

【问题讨论】:

【参考方案1】:

使用以下

NSPredicate *myPredicate = [NSPredicate predicateWithFormat:@"name contains[c] $ARGUMENT"];

for(NSString *searchString in self.allStrings)

    NSPredicate *myNewPredicate = [myPredicate predicateWithSubstitutionVariables:@@"ARGUMENT" :searchString];
    //Here I do the searchOperations with my new predicate

我也建议阅读这篇文章http://nshipster.com/nspredicate/

【讨论】:

【参考方案2】:

好像我刚刚找到了答案。我可以像这样使用 predicateWithSubstitutionVariables:

NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"name contains[c] $searchText"];

NSDictionary *sub = [NSDictionary dictionaryWithObject:searchText forKey:@"searchText"];

NSPredicate *filter = [resultPredicate predicateWithSubstitutionVariables:sub];

【讨论】:

以上是关于NSPredicate - 带参数的动态谓词的主要内容,如果未能解决你的问题,请参考以下文章

Swift 中 NSFetchRequest 的多个 NSPredicates?

Swift - 动态生成 NSPredicate?

复合谓词 NSPredicate

NSPredicate 谓词

谓词(NSPredicate)

谓词 NSPredicate