2012-09-11 2 views
6

Me gustan mucho los literales nuevos en Objective-C. Me pregunto si con las nuevas incorporaciones hay una mejor manera de comparar números.Comparación de NSNumber literales

Por ejemplo, si quiero comparar a y b:

a = @1; 
b = @2; 

es la única manera de comparar ellos de esta manera:

[a intValue] > [b intValue] 

o hay mejores y más elegantes, soluciones?

+0

Si lo desea, puede escribir una categoría agregando métodos como '[a greaterThan: b]' y '[a equalTo: b]' – pasawaya

+0

Es posible que la reescritura de los operadores eventualmente surja como una extensión de este número literal sintaxis. '@ 1' ya se convierte en' [NSNumber numberWithInt: 1] '- no hay ninguna razón para que' @ 1> @ 2' no pueda ser permitido y reescrito como '[@ 1 isGranterThan: @ 2]' (bueno, no hay razón aparte de una posible confusión: "¿Por qué no puedo hacer' if (1> @ 2) '?"). –

+0

sí, tienes razón, quitaría las comparaciones de punteros de bajo nivel ... pero siempre podrían hacer algo como @ 1 @> = @ 2 y luego implementar mayorThanOrEqualTo en NSNumber, por lo que se traduciría como [@ 1 greaterThanOrEqualTo: @ 2] ... de esta manera usted puede mantener su puntero aritmético así como las comparaciones lógicas – 0xSina

Respuesta

13

Para los cheques de igualdad, puede utilizar isEqualToNumber que comprueba si alguno de los contenidos id o es igual (con este último mediante compare):

if ([a isEqualToNumber:b])     // if a == b 

No estoy seguro qué se tampoco implementó los métodos de conveniencia isGreaterThanNumber y isLessThanNumber (y posiblemente >= y <= también), ya que el método compare a continuación parece un poco torpe.

Para los cheques de desigualdad, sólo tiene que utilizar compare directamente (también se puede hacer esto por la igualdad como puede verse en el primero de abajo):

if ([a compare:b] == NSOrderedSame)   // if (a == b) 
if ([a