Confronto di NSNumbers nell’objective C

Sono un principiante al Obj-C e sono un po ‘confuso in questo scenario ho il seguente codice:

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

Quando eseguo questo codice vedo risultati davvero strani come questo:

 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 

Entrambi i numeri sono oggetti NSNumber, come può accadere qualcosa di simile? Sto ottenendo i due numeri trovando le distanze tra gli sprite sullo schermo.

Qualsiasi suggerimento o consiglio sarebbe davvero apprezzato

    Presumo che number1 e number2 siano puntatori agli oggetti. Il segno

    È necessario confrontare l’attuale floatValue o doubleValue

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

    ....

    Per i casi in cui si desidera semplicemente verificare se due proprietà NSNumber mantengono lo stesso valore , allora dalla documentazione Apple sembra che l’utilizzo

     - (BOOL)isEqualToNumber:(NSNumber *)aNumber 

    è il modo più semplice ed efficace per confrontare due valori NSNumber.

    Per esempio:

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

    La documentazione dice anche “Questo metodo è più efficiente del confronto: se sai che i due oggetti sono numeri.”

    Ogni volta che hai bisogno di sapere se un valore è più piccolo o più grande, offrono il

     - (NSComparisonResult)compare:(NSNumber *)aNumber 

    metodo, ma personalmente preferirei a quel punto solo estrarre i valori interi (o valori doppi) e utilizzare gli operatori regolari per fare il confronto, perché questo rende il codice molto più facile da leggere, in questo modo:

     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 } 

    Qualcosa del genere è molto più facile da leggere rispetto alle chiamate a -compare :, secondo me.

    Erik

    NSNumber ha un metodo per il confronto: – (NSComparisonResult) compare: (NSNumber *) aNumber

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

    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 }