NSDictionaryにブール値を追加するにはどうすればよいですか?


112

まあ、整数の場合はを使用しますNSNumber。しかし、YESとNOはオブジェクトではないでしょう。Afaik私はオブジェクトをにのみ追加できますNSDictionaryよね?

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

回答:


156

NSNumberを使用します。

init ...とnumber ...メソッドがあり、整数などと同じようにブール値を取ります。

以下からのNSNumberクラス参照

// 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/1として格納していると思いますか?
感謝

5
@harmsは正しいです。例として NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], @"someKey", nil];
So Over It

29
NSNumbersのリテラル構文があることを指摘する価値があります。 @YESと同じ[NSNumber numberWithBool:YES]
jcampbell1 2013年

51

以降の新しい構文 Apple LLVM Compiler 4.0

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

構文はに変換さBOOLNSNumber、これはに受け入れられNSDictionaryます。


16

リテラルとして宣言し、clang v3.1以降を使用している場合、リテラルとして宣言する場合は@NO / @YESを使用する必要があります。例えば

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

詳細については:

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


1
コンパイラエラーが発生します:NSDictionary型の式でNSMutableDictionary *を初期化する互換性のないポインター型。代わりに宣言をNSDictionaryに変更すると、コンパイラエラーが発生します。タイプNSDictionaryのオブジェクトに見つからないディクショナリ要素を書き込むための予期されたメソッド*
Tony

1
リテラルはを作成するだけでNSDictionary、は作成しませんNSMutableDictionary。は変更できないため、@YESへの割り当てはできません。foo[@"bar"]@{ @"key": @NO }
redhotvengeance 2014年

3

以下のようjcampbell1は指摘し、今はNSNumbersのリテラル構文を使用することができます。

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

-2

これを試して:

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'");
}

出力は次のようになります。

' Pratik 'のブール値はTRUE

Sachin」のブール値はFALSEです


1
[NSNumber numberWithBool:NO]ともできます[NSNumber numberWithBool:YES]
Alex Zavatone 16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.