Gre*_*reg 4 iphone predicate objective-c nsarray nspredicate
如何在谓词是方法的情况下执行NSArray filteredArrayUsingPredicate?这就是一个简单的代码示例在这里看起来像什么?
我一直试图通过谓词doco并且有点困惑.我可以看到它对于简单检查是如何工作的,但是如果我有一个需要几行objective-c代码的检查来实现代码有效的代码:
谢谢
只要您使用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
您可以使用predicateWithBlock:@lxt建议的方法,也可以使用该FUNCTION方法.这可以让你构建一个如下所示的谓词:
[NSPredicate predicateWithFormat:@"FUNCTION(SELF, 'mySuperMethod:', %@)", aParameter];
Run Code Online (Sandbox Code Playgroud)
如果使用该谓词过滤数组,则:
SELF 将迭代地成为数组中的每个项目-mySuperMethod:调用其方法-mySuperMethod:将接收aParameter作为方法的参数-mySuperMethod:将返回一个BOOL 已装箱的NSNumber "这是非常重要的YES从-mySuperMethod:将被包括在过滤阵列英寸有关此语法的更多信息,请查看此博客文章.
那么为什么你想在块方法上使用这种方法呢?我可以想到两个原因:
aParameter符合<NSCoding>协议,这就没问题.块无法序列化.但是,如果这些都不是要求,那么从长远来看,块方法可能会更好,因为它更明显和可读.:)
| 归档时间: |
|
| 查看次数: |
4275 次 |
| 最近记录: |