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

큰! 내부적으로 bool을 0/1로 저장한다고 생각합니까?
감사합니다

5
@harms가 정확합니다. 예를 들어 : NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], @"someKey", nil];
So Over It

29
이제 NSNumbers에 대한 리터럴 구문이 있다는 점을 지적 할 가치가 있습니다. @YES과 동일[NSNumber numberWithBool:YES]
jcampbell1

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. 따라서 는 변경할 수 없기 때문에 할당 @YESfoo[@"bar"]@{ @"key": @NO }없습니다.
redhotvengeance

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 2016
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.