tutorial studio spec guide ggplot descargar objective-c nsnumber

objective-c - studio - html spec



Comparando NSNumbers en Objective C (4)

Asumo que número1 y número2 son punteros a objetos. El signo <está comparando los punteros.

Debe comparar el valor real de floatValue o doubleValue

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

....

Soy un principiante en Obj-C y estoy un poco confundido en este escenario, tengo el siguiente código:

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

Cuando ejecuto este código veo resultados realmente extraños como este:

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

Ambos números son objetos NSNumber, ¿cómo podría suceder algo como esto? Estoy obteniendo los dos números al encontrar distancias entre los sprites en la pantalla.

Cualquier pista o consejo sería realmente apreciado.


NSNumber tiene un método de comparación: - (NSComparisonResult) compare: (NSNumber *) aNumber

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


Para los casos en los que simplemente desea probar si dos propiedades NSNumber tienen el mismo valor , entonces de la documentación de Apple parece que al usar

- (BOOL)isEqualToNumber:(NSNumber *)aNumber

es la forma más sencilla y eficiente de comparar dos valores de NSNumber.

Por ejemplo:

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

La documentación también dice "Este método es más eficiente que comparar: si sabes que los dos objetos son números".

Siempre que necesite saber si un valor es menor o mayor, le ofrecen

- (NSComparisonResult)compare:(NSNumber *)aNumber

método, pero personalmente preferiría en ese punto simplemente extraer los valores enteros (o valores dobles) y usar operadores <y> regulares para hacer la comparación, porque eso hace que el código sea mucho más fácil de leer, así:

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 }

Algo así es mucho más fácil de leer que las llamadas a -compare :, en mi opinión.

Erik


Swift 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 }