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
.