[objective-c] NSNumber를 증가시키는 방법

NSNumber는 어떻게 증가합니까?

즉 myNSNumber ++



답변

업데이트 : 참고로, 저는 개인적으로 BoltClock과 DarkDusts의 한 줄 답변을 더 좋아합니다. 더 간결하고 추가 변수가 필요하지 않습니다.


를 증가 NSNumber시키려면 그 값을 가져 와서 증가시키고 새로운 NSNumber.

예를 들어 NSNumber정수를 보유하는 경우 :

NSNumber *number = [NSNumber numberWithInt:...];
int value = [number intValue];
number = [NSNumber numberWithInt:value + 1];

또는 NSNumber부동 소수점 숫자를 보유하는 경우 :

NSNumber *number = [NSNumber numberWithDouble:...];
double value = [number doubleValue];
number = [NSNumber numberWithDouble:value + 1.0];


답변

NSNumber객체는 불변입니다. 당신이 할 수있는 최선의 방법은 프리미티브 값을 잡고 그것을 증가시킨 다음 그 결과를 자체 NSNumber객체 로 감싸는 것입니다 :

NSNumber *bNumber = [NSNumber numberWithInt:[aNumber intValue] + 1];


답변

객체 리터럴을 사용하여 최신 버전의 Xcode (4.4.1, SDK 5.1로 작성)를 사용하는 사람이라면 코드를 조금 더 정리할 수 있습니다.

NSNumber *x = @(1);
x = @([x intValue] + 1);
// x = 2

복싱을 처리하고 모든 것을 개봉하여 간단한 작업을 수행하는 것은 여전히 ​​고통 스럽지만 점점 좋아지고 있거나 적어도 짧아지고 있습니다.


답변

NSNumber는 변경할 수 없으므로 새 인스턴스를 만들어야합니다.

// Work with 64 bit to support very large values
myNSNumber = [NSNumber numberWithLongLong:[myNSNumber longLongValue] + 1];

// EDIT: With modern syntax:
myNSNumber = @([myNSNumber longLongValue] + 1);


답변

모두 합치면 다음과 같은 이점이 있습니다.

myNSNumber = @(myNSNumber.intValue + 1);


답변

점 표현이 더 간결하기 때문에 IOS 가 처음부터 지원하는 이유입니다 .

myNSNumber = [NSNumber numberWithInt:myNSNumber.intValue + 1];


답변

정수 값을 저장하는 데 사용하는 경우 :

myNSNumber = @(myNSNumber.longLongValue + 1);

부동 소수점의 경우 짧은 대답은 다음과 같지만 이렇게하는 것은 나쁜 생각입니다. 정밀도가 떨어지고 나중에 [myNSNumber isEqual : @ (4.5)]와 같이 어떤 종류의 비교를 수행하면 놀랄 수 있습니다. :

myNSNumber = @(myNSNumber.floatValue + 1);

Objective-C에서 객체로 표현 된 부동 소수점 숫자에 대해 수학을 수행해야하는 경우 (즉, 배열, 사전 등에 배치해야하는 경우)를 사용해야합니다 NSDecimalNumber.