Что делать, если у меня есть метод, возвращающий CGFloat, и этот метод не смог найти ожидаемое число, я хотел бы вернуть что-то вроде NSNotFound, но это NSInteger.Что такое эквивалент NSNotFound для поплавков
Какова наилучшая практика для этого?
Что делать, если у меня есть метод, возвращающий CGFloat, и этот метод не смог найти ожидаемое число, я хотел бы вернуть что-то вроде NSNotFound, но это NSInteger.Что такое эквивалент NSNotFound для поплавков
Какова наилучшая практика для этого?
Вы можете использовать не число (NaN
).
Однако для решения этих вопросов, где нет четко определенной не значение (это хуже, с целыми числами), то я предпочитаю использовать метод следующую семантику:
- (BOOL)parseString:(NSString *)string
toFloat:(CGFloat *)value
{
// parse string here
if (parsed_string_ok) {
if (value)
*value = parsedValue;
return YES;
}
return NO;
}
Использование 'NaN' в качестве значения дозорного устройства имеет различные подводные камни, например, если передать его в API, которые этого не ожидают, вы можете получить неожиданные неожиданные результаты. CoreGraphics становится особенно несчастным (сбои и т. Д.), Если вы передадите ему значения «NaN». Чтобы быть в безопасности, вам нужно проверить результат каждого вызова, который когда-либо мог вернуть «NaN», и в этот момент вы могли бы просто сделать то, что предложил @Droppy, и использовали параметр out и параметр «BOOL» возвращаемое значение. Каждый раз, когда я использовал «NaN» в качестве ценностного значения, я пришел к выводу, что этого не делал. – ipmcc
@ipmcc Спасибо за вход. – Droppy
Я думаю, что 'Nan' просто не« iOS », поэтому его не ожидается, и вы не должны его использовать. – iCaramba
Довольно чистый способ заключается в завернуть его в NSNumber:
- (NSNumber *)aFloatValueProbably
{
CGFloat value = 0.0;
if (... value could be found ...) {
return @(value);
}
return nil;
}
Затем вы можете проверить, если функция вернула ноль для несуществующих значений.
Мне нравится это лучше, чем мой ответ. – Droppy
Недостатком этого подхода является, очевидно, производительность, поскольку (большинство) NSNumbers выбраны в виде кучи. – ipmcc
Это было то, что я делал первым, но возврат NSNumber не кажется правильным, когда метод вычисляет высоту ячейки, которая является CGFloat – bobmoff
Возможно, 'CGFLOAT_MAX' или' CGFLOAT_MIN' будет работать для вас. – rmaddy
Слово предупреждения о 'DBL_MIN',' FLT_MIN' и 'CGFLOAT_MIN': возможно, интуитивно, они не * то, что вы обычно считали бы« минимальным »возможным значением, а скорее« наименьшим », положительное * количество, которое может быть представлено этим типом ". Если вы хотите «самое отрицательное»/«минимальное» значение, используйте '-DBL_MIN',' -FLT_MIN' или '-CGFLOAT_MIN'. – ipmcc