69 votes

Comparaison des numéros NSNumbers dans l’objectif C

Je suis un débutant à Obj-C et je suis un peu confus à ce scénario, j'ai le code suivant:

 if (number1 < number2) {

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

}
 

Quand je lance ce code, je vois des résultats vraiment étranges comme celui-ci:

 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
 

Les deux nombres sont des objets NSNumber, comment une telle chose pourrait-elle arriver? Je reçois les deux nombres en trouvant les distances entre les sprites à l'écran.

Des indices ou des conseils seraient vraiment appréciés

113voto

Kal Points 14230

Je suppose que number1 et number2 sont des pointeurs sur des objets. Le signe <compare les pointeurs.

Vous devez comparer la valeur floatValue ou doubleValue réelle.

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

....

43voto

Erik van der Neut Points 382

Pour les cas où vous voulez simplement tester si deux NSNumber propriétés de tenir la même valeur, puis à partir de la documentation d'Apple, il semble que l'utilisation de

- (BOOL)isEqualToNumber:(NSNumber *)aNumber

le plus simple et efficace pour comparer deux NSNumber valeurs.

Par exemple:

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

La documentation dit également que "Cette méthode est plus efficace que de comparer: si vous connaissez les deux objets sont des nombres."

Chaque fois que vous avez besoin de savoir si une valeur est plus petite ou plus grande, ils offrent la

- (NSComparisonResult)compare:(NSNumber *)aNumber

la méthode, mais personnellement, je préfère à ce point à juste tirer les valeurs entières (ou double) et à utiliser les opérateurs < et > pour faire la comparaison, parce que cela rend le code plus facile à lire, comme suit:

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
}

Quelque chose comme ça, c'est beaucoup plus facile à lire que les appels à comparer, à mon avis.

Erik

18voto

JastinBall Points 306

NSNumber a une méthode de comparaison: - (NSComparisonResult) compare: (NSNumber *) aNumber

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X