Ответ 1
Я предполагаю, что number1 и number2 являются указателями на объекты. < знак сравнивает указатели.
Вам нужно сравнить фактическое значение floatValue или doubleValue
if ([number1 doubleValue] < [number2 doubleValue])
....
Я новичок в 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, как могло произойти что-то подобное? Я получаю два числа, находя расстояние между спрайтами на экране.
Любые подсказки или советы действительно будут оценены
Я предполагаю, что 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
}
Что-то вроде этого гораздо легче читать, чем звонки на -compare:, на мой взгляд.
Эрик
NSNumber имеет метод сравнения: - (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
}