Objective-C에서 NSNumber를 int로 변환


122

NSDictionary에 추가하기 전에 int를 NSNumber로 변환 [NSNumber numberWithInt:42]하거나 사용합니다 @(42).

int intValue = 42;
NSNumber *numberValue = [NSNumber numberWithInt:intValue];
NSDictionary *dict = @{ @"integer" : numberValue };

NSDictionary에서 값을 검색 할 때 NSNumber에서 int로 다시 변환하려면 어떻게해야합니까?

NSNumber *number = dict[@"integer"];
int *intNumber = // ...?

이렇게하면 캐스팅이 필요하다는 예외가 발생합니다.

int number = (int)dict[@"integer"];

답변:


192

설명서를 살펴보십시오 . intValue방법을 사용하십시오 :

NSNumber *number = [dict objectForKey:@"integer"];
int intValue = [number intValue];

암시 적 변환은 이제 ARC에서 허용되지 않습니다.
Alexander는

기본적으로 [key intValue](키입니다 NSNumber)
user924은

61

NSInteger가능 하면 데이터 유형을 고수해야 합니다. 따라서 다음과 같은 번호를 생성합니다.

NSInteger myValue = 1;
NSNumber *number = [NSNumber numberWithInteger: myValue];

디코딩은 integerValue다음 방법으로 작동합니다 .

NSInteger value = [number integerValue];

왜 그는에 집착해야 NSInteger합니까?
Iulian Onofrei

1
int예, 원시적입니다. 그러나 최대 허용 수는 덜 정확하게 정의되어 있습니다. NSInteger기본적으로 32 비트 컴퓨터에서는 32 비트, 64 비트 장치에서는 64 비트로 알려진 일부 원시 정수 유형의 별칭입니다.
Max Seelemann

1
예, Apple이 제안합니다.
Max Seelemann

1
네이티브 숫자 산술에 대해 추측하지 않는 것이 좋습니다. 을 사용할 수는 int있지만 크로스 플랫폼 라이브러리와의 인터페이스를 제외하고는 거의 의미가 없습니다. 그리고 그런 경우에도 uint32_t사용하는 것이 더 좋습니다.
Max Seelemann

1
그렇게하면 확실히 플랫폼 코딩 표준과 더 일관성이 있습니다.
Max Seelemann



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