developer tip

NSNumber를 증가시키는 방법

optionbox 2020. 8. 8. 12:27
반응형

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.


나중에 쉽게 사용할 수 있도록 카테고리를 사용하십시오. 여기에 기본적인 아이디어가 있습니다.

 - (void)incrementIntBy:(int)ammount {
      self = [NSNumber numberWithInt:(self.intValue + ammount)];
 }

이 질문에 대한 답변에 많은 좋은 정보가 있습니다. 내 코드에서 선택한 답변을 사용했으며 작동했습니다. 그런 다음 나머지 게시물을 읽기 시작했고 코드를 많이 단순화했습니다. Xcode 5에 도입 된 표기법의 변경 사항에 익숙하지 않으면 읽기가 조금 더 어렵지만 훨씬 깔끔합니다. 아마 한 줄만 만들 수도 있겠지만, 내가 뭘하고 있는지 알아 내기가 너무 어렵습니다.

NSNumber를 사전에 저장하고 있으며 증가시키고 싶습니다. 나는 그것을 얻고, 그것을 int로 변환하고, 그것을 NSNumber로 변환하는 동안 증가시킨 다음 사전에 다시 넣습니다.

이전 코드

 NSNumber *correct = [scoringDictionary objectForKey:@"correct"];
 int correctValue = [correct intValue];
 correct = [NSNumber numberWithInt:correctValue + 1];
 [scoringDictionary removeObjectForKey:@"correct"];
 scoringDictionary[@"correct"] = correct;

새 코드

NSNumber *correct = [scoringDictionary objectForKey:@"correct"];
scoringDictionary[@"correct"] = @(correct.intValue + 1);

참고 URL : https://stackoverflow.com/questions/4793181/how-to-increment-a-nsnumber

반응형