ProgramingTip

Objective C에서 NSNumber 비교

bestdevel 2020. 11. 26. 19:39
반응형

Objective C에서 NSNumber 비교


저는 Obj-C의 하나 이고이 시나리오에서 혼란 스럽습니다. 다음 코드가 있습니다.

if (number1 < number2) {

            NSLog(@"THE FOLLOWING NUMBER ");
            NSLog(@"%@", number1);
            NSLog(@"IS LESS THAN");
            NSLog(@"%@", number2);

}

이 코드를 실행하면 다음과 같이 정말 이상한 결과가 나타납니다.

2011-07-06 20:38:18.044 helloworld[1014:207] THE FOLLOWING NUMBER 
2011-07-06 20:38:18.047 helloworld[1014:207] 190.8776
2011-07-06 20:38:18.050 helloworld[1014:207] IS LESS THAN
2011-07-06 20:38:18.053 helloworld[1014:207] 96.75866

두 숫자 모두 NSNumber 객체입니다. 어떻게 이런 일이 있습니까? 화면에서 스프라이트 사이의 거리를 찾아 두 숫자를 얻습니다.

어떤 단서 나 조언 정말 감사하겠습니다


나는 숫자 1과 숫자 2가 객체에 대한 포인터라고 가정합니다. <기호는 포인터를 비교하고 있습니다.

실제 floatValue 또는 doubleValue를 비교해야합니다.

if ([number1 doubleValue] < [number2 doubleValue]) 

....


두 개의 NSNumber 속성이 동일한 경우 값을 유지 간단히 테스트하려는 경우 Apple 문서에서 다음을 사용하는 경우.

- (BOOL)isEqualToNumber:(NSNumber *)aNumber

두 개의 NSNumber 값을 비교하는 가장 간단하고 쉬운 방법입니다.

예를 들면 :

if ([someNumber isEqualToNumber:someOtherNumber])
{
    // The numbers hold the same value
}
else
{
    // The numbers hold different values
}

문서에는 또한 "이 방법은 비교하는 것보다 더 먼저입니다."라고합니다.

가치가 더 작은 지 더 큰지 알아야 할 때마다 지 더 큰지

- (NSComparisonResult)compare:(NSNumber *)aNumber

하지만 개인적으로 저는 그 시점에서 정수 값 (또는 이중 값)을 꺼내고 일반 <및> 연산자를 사용하여 비교를 수행하는 것을 선호합니다. 이렇게하면 코드를 쉽게 읽을 수 있기 때문입니다.

if (firstNumber.intValue > secondNumber.intValue)
{
    // First number is greater than the second number
}
else if (firstNumber.intValue == secondNumber.intValue)
{
    // The two numbers have the same value
}
else
{
    // The first number is smaller than the second number
}

제 생각에는 -compare :를 호출하는 것보다 읽기가 수준이 있습니다.

에릭


의 NSNumber에는 비교 방법이 있습니다 .- (NSComparisonResult) 비교 : (의 NSNumber를 *) 인 aNumber

if([numberOne compare:numberTwo] == NSOrderedSame) 
{
      // proceed
}

스위프트 3.1

let number1 = NSNumber(value: 10.2)
let number2 = NSNumber(value: 20.2)
let result = number1.compare(number2)
if  result == .orderedAscending {

} else if result == .orderedDescending {

} else { // .orderedSame

}

참고 URL : https://stackoverflow.com/questions/6605262/comparing-nsnumbers-in-objective-c

반응형