如何在谓词是方法的情况下执行NSArray filteredArrayUsingPredicate?这是一个简单的代码示例在这里看起来像什么?
我一直试图通过谓词doco并且有点困惑。我可以看到它对于简单检查是如何工作的,但如果我有一个需要几行objective-c代码的检查来实现代码有效的代码:
感谢
答案 0 :(得分:7)
只要您使用iOS 4.0及更高版本,您就会很高兴知道这非常简单(以下内容不适用于3.x)。
您可以使用predicateWithBlock
方法创建一个NSPredicate,它接受一个返回YES或NO作为参数的块。所以你想要的正是如此(如果你不熟悉块,它们基本上是一种封装方法的方法。见这里:http://pragmaticstudio.com/blog/2010/7/28/ios4-blocks-1)
+ (NSPredicate *)predicateWithBlock:(BOOL (^)(id evaluatedObject, NSDictionary *bindings))block
答案 1 :(得分:6)
您可以使用@lxt建议的predicateWithBlock:
方法,也可以使用FUNCTION
方法。这可以让你构建一个如下所示的谓词:
[NSPredicate predicateWithFormat:@"FUNCTION(SELF, 'mySuperMethod:', %@)", aParameter];
如果使用该谓词过滤数组,则:
SELF
将迭代地成为数组中的每个项目-mySuperMethod:
方法-mySuperMethod:
将收到aParameter
作为方法的参数-mySuperMethod:
将返回BOOL
<<<<<<这非常重要NSNumber
返回YES
的所有对象都将包含在已过滤的数组中。有关此语法的详细信息,请查看this blog post。
那你为什么要在块方法上使用这种方法呢?我可以想到两个原因:
-mySuperMethod:
符合aParameter
协议,这就没问题。块无法序列化。但是,如果这些都不是要求,那么从长远来看,块方法可能会更好,因为它更明显和可读。 :)