替换 NSPredicate 中的变量

Posted

技术标签:

【中文标题】替换 NSPredicate 中的变量【英文标题】:Replacing a variable in an NSPredicate 【发布时间】:2014-02-15 19:47:39 【问题描述】:

我的NSPredicate

[NSPredicate predicateWithFormat:@"$1.employees.@count == 50"] ;

如何通过将$1 替换为self(或什么都不用)从这个中获得一个新的NSPredicate?我怎样才能得到谓词

[NSPredicate predicateWithFormat:@"self.employees.@count == 50"] ;

我不想评估我的谓词,我想要一个新的谓词。

【问题讨论】:

【参考方案1】:

您可以从“谓词模板”创建谓词。但是,$1 不是有效的 谓词模板中的变量和

[NSPredicate predicateWithFormat:@"$1.employees.@count == 50"]

实际上会导致运行时异常。但以下工作,应该证明这个想法:

NSPredicate *p1 = [NSPredicate predicateWithFormat:@"$foo.employees.@count == 50"] ;
NSLog(@"%@", p1);
// $foo.employees.@count == 50

// Substitute $foo by self:
NSPredicate *p2 = [p1 predicateWithSubstitutionVariables:@@"foo": [NSExpression expressionForEvaluatedObject]];
NSLog(@"%@", p2);
// employees.@count == 50

// Substitute $foo by "bar":
NSPredicate *p3 = [p1 predicateWithSubstitutionVariables:@@"foo": [NSExpression expressionForKeyPath:@"bar"]];
NSLog(@"%@", p3);
// bar.employees.@count == 50    

欲了解更多信息,请参阅"Creating Predicates Using Predicate Templates" 在“谓词编程指南”中。

【讨论】:

我爱你@Martin =8-° 是的,你是对的,我在等着看看是否有人会提供更好的东西......但这怎么可能呢? 也许你会对这个话题有所了解:***.com/q/21823339/1670830。谢谢。

以上是关于替换 NSPredicate 中的变量的主要内容,如果未能解决你的问题,请参考以下文章

目标c中的电子邮件地址验证

对数组中的字符串不区分大小写的NSPredicate?

+[NSPredicate predicateWithFormat] 替换保留字

xctest 使用 NSPredicate 最终替换 Quick/Nimble

Objective-C:NSPredicate LIKE 不喜欢空格。是不是有用于替换空格的转义序列?

如何在 NSPredicate 中定义临时变量?