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 compare:b] == NSOrderedAscending) // if (a < b)
if ([a compare:b] == NSOrderedDescending) // if (a > b)
if ([a compare:b] != NSOrderedSame) // if (a != b)
if ([a compare:b] != NSOrderedAscending) // if (a >= b)
if ([a compare:b] != NSOrderedSescending) // if (a <= b)
Los detalles se pueden encontrar en la NSNumber class documentation page.
Tenga en cuenta que no hay nada que le impida la creación de su propia ayudante función que, por ejemplo, permitir que un código como:
if (nsnComp1 (a, ">=", b)) ... // returns true/false (yes/no)
o:
if (nsnComp2 (a, b) >= 0) ... // returns -1/0/+1
aunque es menos Objective-C y más C :-) Depende de si su definición de "elegante" está ligada principalmente por la eficiencia o legibilidad. Si es preferible a su opción intValue
es una decisión que deberá tomar usted mismo.
Si lo desea, puede escribir una categoría agregando métodos como '[a greaterThan: b]' y '[a equalTo: b]' – pasawaya
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) '?"). –
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