2010-03-11 4 views
12

NSNumber를 고정 값과 비교하는 더 좋은 방법이 있을까요? 조금 어색해 보입니다.NSNumber를 고정 값과 비교합니까?

if([myNumber isEqualToNumber:[NSNumber numberWithInt:0]]) NSLog(@"Zero"); 

...

게리

을 내가 -compare 사용할 수 있습니다 알고 있지만, 거의 같은 모양
+2

모든 것은 잠시 동안 약간 투박한 느낌 : 일찍 자리 문제를 도울 수있는 잘못된 유형으로의 NSNumber를 만들려고하면 또한, 엑스 코드의 최신 버전은 제대로 경고합니다 . – MJeffryes

+2

리터럴을 사용하면 다음과 같이 매우 나쁘지 않습니다. [NSNumber isEqualToNumber : @ 0] –

답변

49

방법에 대한 if ([myNumber intValue] == 0)? (또는 < 또는>). 의 int, 플로트를 포함 할 수 있습니다

+0

Doh :) 완벽하고 많은 감사합니다. Ben ... – fuzzygoat

+7

숫자가 정수로 알려져있는 경우에만 작동합니다. 값이 0.4 인 NSNumber의 intValue는 0이됩니다. –

5

NSNumber 개체는 매우 빠르고 읽기 쉬운 (A NSNumberintValue에 비해) 등 벤의 접근 방식을 두 배로,하지만 당신은 myNumber이 항상 보장 할 수있는 경우에만 제대로 작동 범위는 int입니다 (향후 코드가 변경된 후에도 항상 적용됩니다).

정확한 유형이 myNumber 인 경우 실제로 접근 방법이 우수합니다.

// This will work regardless if myNumber is an int, double etc. 
[myNumber isEqualToNumber:[NSNumber numberWithInt:0]] 

큰 고정 소수점 수 또는 부동 소수점 수와 비교하면 어쨌든이 경로를 사용해야합니다. 를 Obj-C의

Xcode 6.1.3 implicit conversion warning NSNumber

+1

버그의 또 다른 미묘한 원인은'intValue'에서 잘못된 결과를 생성 할 수있는 서브 클래스 NSDecimalNumber입니다. +1 –

관련 문제