述語に書き込むだけです。たとえば、呼び出されたメソッドを持つオブジェクトがあり、isOdd
配列をフィルタリングして、に対してtrueを返すオブジェクトのみを含めると仮定すると、次のisOdd
ように実行できます。
#import <Foundation/Foundation.h>
@interface barfoo : NSObject
{
int number;
}
- (BOOL)isOdd;
- (id)initWithNumber:(int)number;
@end
@implementation barfoo
- (NSString *)description
{
return [NSString stringWithFormat:@"%i", number];
}
- (BOOL)isOdd
{
return (number % 2);
}
- (id)initWithNumber:(int)tnumber
{
if((self = [super init]))
{
number = tnumber;
}
return self;
}
@end
int main(int argc, char *argv[]) {
@autoreleasepool {
NSMutableArray *array = [NSMutableArray array];
for(int i=0; i<10; i++)
{
barfoo *foo = [[barfoo alloc] initWithNumber:i];
[array addObject:[foo autorelease]];
}
NSLog(@"%@", array); // prints 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isOdd == true"]; // This is oure predicate. isOdd must be true for objects to pass
NSArray *result = [array filteredArrayUsingPredicate:predicate];
NSLog(@"%@", result);
}
}
もちろん、これは逆の方法でも機能します。述語を読み取ることもisOdd == false
、オブジェクトが渡すための要件をさらに追加することもできます。例isOdd == true AND foo == bar
:NSPredicate
構文の詳細については、NSPredicate
ドキュメントを参照してください。