Сравнение NSNumbers в объективе C
Я новичок в Obj-C и я немного запутался в этом сценарии у меня есть следующий код:
if (number1 < number2) {
NSLog(@"THE FOLLOWING NUMBER ");
NSLog(@"%@", number1);
NSLog(@"IS LESS THAN");
NSLog(@"%@", number2);
}
когда я запускаю этот код, я вижу действительно странные результаты:
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
оба числа являются объектами NSNumber, как это может произойти? Я получаю два числа, находя расстояния между спрайтами на экране.
любые подсказки или советы будут очень цениться
4 ответа:
Я предполагаю, что number1 и number2 являются указателями на объекты. Знак
вам нужно сравнить фактическое значение floatValue или doubleValue
if ([number1 doubleValue] < [number2 doubleValue])
....
для случаев, когда вы просто хотите проверить, содержат ли два свойства NSNumber то же значение, то из документации Apple кажется, что с помощью
- (BOOL)isEqualToNumber:(NSNumber *)aNumber
это самый простой и эффективный способ сравнить два значения NSNumber.
например:
if ([someNumber isEqualToNumber:someOtherNumber]) { // The numbers hold the same value } else { // The numbers hold different values }
в документации также говорится: "Этот метод более эффективен, чем сравнение: если вы знаете, что два объекта являются числами."
всякий раз, когда вам нужно знать если значение меньше или больше, они предлагают
- (NSComparisonResult)compare:(NSNumber *)aNumber
метод, но лично я предпочел бы в этот момент просто вытащить целочисленные значения (или двойные значения) и использовать регулярные операторы для сравнения, потому что это делает код намного легче читать, например:
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 }
что-то вроде этого гораздо легче читать, чем призывы-сравнить:, на мой взгляд.
Ерик