NSComparisonPredicateクラス
INDEX>Foundation>NSComparisonPredicate
解説
継承 | NSPredicate : NSObject |
準拠 | NSCoding (NSPredicate) |
NSCopying (NSPredicate) | |
NSObject (NSObject) | |
フレームワーク | /System/Library/Frameworks/Foundation.framework |
使用可能 | Mac OS X v10.4以降,iOS 3.0以降 |
定義 | NSComparisonPredicate.h |
概要
比較する式を表現するためのクラスです。NSPredicateで使用する age >=30 などの表現を作成することができます。
作成
比較記述式の作成
検索キーと式の左項、右項、演算子でNSPredicateオブジェクトを作成するには(+ predicateWithLeftExpression:rightExpression:modifier:type:options)メソッドを使用します。比較演算をセレクタで指定してNSPredicateオブジェクトを作成するには(+ predicateWithLeftExpression:rightExpression:customSelector)メソッドを使用します。
allocで作成してから検索キーと式の左項、右項、演算子でNSPredicateオブジェクトを初期化するには(– initWithLeftExpression:rightExpression:modifier:type:options)メソッドを使用します。比較演算をセレクタで指定してNSPredicateオブジェクトを初期化するには(– initWithLeftExpression:rightExpression:customSelector)メソッドを使用します。
ダミーのリストの中からageが20以上40未満の人物を抽出するサンプル
#pragma mark NSPredicate:predicateWithFormat: -(void)method001 { //age NSExpression *lhs = [NSExpression expressionForKeyPath:@"age"]; //20 NSExpression *greaterThanRhs = [NSExpression expressionForConstantValue:[NSNumber numberWithInt:20]]; //age >= 20 NSPredicate *greaterThanPredicate = [NSComparisonPredicate predicateWithLeftExpression:lhs rightExpression:greaterThanRhs modifier:NSDirectPredicateModifier type:NSGreaterThanOrEqualToPredicateOperatorType //>= options:0]; //40 NSExpression *lessThanRhs = [NSExpression expressionForConstantValue:[NSNumber numberWithInt:40]]; //age < 40 NSPredicate *lessThanPredicate = [NSComparisonPredicate predicateWithLeftExpression:lhs rightExpression:lessThanRhs modifier:NSDirectPredicateModifier type:NSLessThanPredicateOperatorType // < options:0]; //age >= 20 AND age < 40 NSPredicate *comPredicate = [NSCompoundPredicate andPredicateWithSubpredicates: [NSArray arrayWithObjects:greaterThanPredicate, lessThanPredicate, nil]]; NSDictionary *tanaka = [[NSDictionary alloc] initWithObjectsAndKeys: [NSNumber numberWithInt:30],@"age" , @"Tanaka",@"lastName",@"Taro",@"firstName",nil]; NSDictionary *sato = [[NSDictionary alloc] initWithObjectsAndKeys: [NSNumber numberWithInt:43],@"age" , @"Sato",@"lastName",@"Satoko",@"firstName",nil]; NSDictionary *suzuki = [[NSDictionary alloc] initWithObjectsAndKeys: [NSNumber numberWithInt:39],@"age" , @"Suzuki",@"lastName",@"Ichiro",@"firstName",nil]; NSDictionary *yamada = [[NSDictionary alloc] initWithObjectsAndKeys: [NSNumber numberWithInt:12],@"age" , @"Yamada",@"lastName",@"Jiro",@"firstName",nil]; NSArray *anArray = [[NSArray alloc] initWithObjects:tanaka,sato,suzuki,yamada,nil]; NSArray *aResult = [anArray filteredArrayUsingPredicate:comPredicate]; NSLog(@"%s %@",__FUNCTION__,[aResult description]); NSLog(@"%s %@", __FUNCTION__,[comPredicate predicateFormat]); }
オブジェクトの情報を取得する
レシーバの比較記述式装飾子(日本語にすると何のことかわかりませんね、comparison predicate modifier)を返すには(– comparisonPredicateModifier)メソッドを使います。
NSDirectPredicateModifier
直接左辺と右辺を比較する際に使用します。
NSAllPredicateModifier
対多のリレーションシップのすべての要素を比較する際に使用します。
NSAnyPredicateModifier
対多のリレーションシップの任意の要素を比較する際に使用します。
レシーバのカスタムセレクタを取得するには(– customSelector)メソッドを使います。SEL型で返ってきますので文字列にするにはNSStringFromSelector()を使用します。
レシーバの左辺を取得するには(– leftExpression)メソッドを、右辺を取得するには(– rightExpression)メソッドを使用します。レシーバの演算子タイプを取得するには(– predicateOperatorType)メソッドを使用します。
●演算子タイプ
NSLessThanPredicateOperatorType
<
NSLessThanOrEqualToPredicateOperatorType
<=
NSGreaterThanPredicateOperatorType
>
NSGreaterThanOrEqualToPredicateOperatorType
>=
NSEqualToPredicateOperatorType
==
NSNotEqualToPredicateOperatorType
!=
NSMatchesPredicateOperatorType
MATCHES
NSLikePredicateOperatorType
LIKE
NSBeginsWithPredicateOperatorType
BEGINSWITH
NSEndsWithPredicateOperatorType
ENDSWITH
NSInPredicateOperatorType
IN
NSCustomSelectorPredicateOperatorType
カスタムセレクタを使用
オプションを取得するには(– options)メソッドを使用します。
●オプション
NSCaseInsensitivePredicateOption
大文字小文字を区別しない([c]オプション)
NSDiacriticInsensitivePredicateOption
発音記号を区別しない([d]オプション)
NSNormalizedPredicateOption
上記2つに代わって前処理される([n]オプション)