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
'developer tip' 카테고리의 다른 글
XML 문자열을 사전으로 변환하는 방법은 무엇입니까? (0) | 2020.08.08 |
---|---|
고정 된 PostgreSQL 데이터베이스 백업 / 복원 (0) | 2020.08.08 |
IPython 노트북의 로깅 모듈에서 출력 가져 오기 (0) | 2020.08.07 |
높이 변경시 이미지 종횡비 유지 (0) | 2020.08.07 |
ESLint 예기치 않은 isNaN 사용 (0) | 2020.08.07 |