2009-05-24 14 views
102

整数の場合、私はNSNumberを使用します。しかし、YESとNOはオブジェクトではありません。私の知る限り。 NSDictionaryにオブジェクトを追加することはできますか?どのようにNSDictionaryにブール値を追加できますか?

ブーリアンのラッパークラスが見つかりませんでした。何かありますか?

答えて

149

NSNumberを使用します。

これは、整数などと同様にブール値をとるinitとnumber ...メソッドを持っています。

NSNumber class referenceから

// Creates and returns an NSNumber object containing a 
// given value, treating it as a BOOL. 
+ (NSNumber *)numberWithBool:(BOOL)value 

と:

// Returns an NSNumber object initialized to contain a 
// given value, treated as a BOOL. 
- (id)initWithBool:(BOOL)value 

と:

// Returns the receiver’s value as a BOOL. 
- (BOOL)boolValue 
+0

グレート!私は内部的にブールを0/1として保存していると思いますか? – Thanks

+5

@harmsが正しいです。例: 'NSDictionary * dictionary = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES]、@" someKey "、nil];' –

+24

NSNumbersのためのリテラル構文があることを指摘しておきましょう。 '@ YES'は' [NSNumber numberWithBool:YES] 'と同じです – jcampbell1

16

リテラルとして宣言していて、打ち鳴らすv3.1のを使用している場合、またはリテラルとして宣言している場合は@NO/@YESを使用してください。例えば。その詳細は

NSMutableDictionary* foo = [@{ @"key": @NO } mutableCopy]; 
foo[@"bar"] = @YES; 

http://clang.llvm.org/docs/ObjectiveCLiterals.html

+1

コンパイルエラーを取得します:NSMutableDictionary *をNSDictionary型で初期化する互換性のないポインタ型。宣言をNSDictionaryに変更すると、コンパイラエラーが発生します。NSDictionary * – Tony

+1

型のオブジェクトに見つからない辞書要素を書き込む予想されるメソッドリテラルはNSMutableDictionaryではなくNSDictionaryを作成します。したがって、 '@ {@" key ":@NO}'は可変ではないので、 'foo [@" bar "]'に '@ YES 'を割り当てることはできません。 – redhotvengeance

+0

うわー、そのタイポに申し訳ありません、私はそれを更新しました。 – sabalaba

39

新しい構文

dictionary[@"key1"] = @(boolValue); 
dictionary[@"key2"] = @YES; 

構文はNSDictionaryに受け入れられるNSNumber、へBOOL変換Apple LLVM Compiler 4.0以来。

+1

これは受け入れられる回答である必要があります。 –

+0

まだ動作、本当にありがとう男! –

2

jcampbell1は今、あなたがNSNumbersのためのリテラル構文を使用することができ、指摘したように:出力は以下のようになります

NSMutableDictionary *dic = [[NSMutableDictionary alloc] init]; 
[dic setObject:[NSNumber numberWithBool:TRUE] forKey:@"Pratik"]; 
[dic setObject:[NSNumber numberWithBool:FALSE] forKey:@"Sachin"]; 

if ([dic[@"Pratik"] boolValue]) 
{ 
    NSLog(@"Boolean is TRUE for 'Pratik'"); 
} 
else 
{ 
    NSLog(@"Boolean is FALSE for 'Pratik'"); 
} 

if ([dic[@"Sachin"] boolValue]) 
{ 
    NSLog(@"Boolean is TRUE for 'Sachin'"); 
} 
else 
{ 
    NSLog(@"Boolean is FALSE for 'Sachin'"); 
} 

ブールがある

NSDictionary *data = @{ 
         // when you always pass same value 
         @"someKey" : @YES 
         // if you want to pass some boolean variable 
         @"anotherKey" : @(someVariable) 
         }; 
-2

はこれを試してみてくださいTRUE」Pratik '

ブールのためFALSEは' サチン

+1

'[NSNumber numberWithBool:NO]'と '[NSNumber numberWithBool:YES]'を実行することもできます。 –

関連する問題