2016-02-21 4 views
3

Я пытаюсь получить long значение NSString по телефону longValue, но NSString не отвечает на longValue. Это, однако, делает отвечает на intValue и longLongValue.Почему NSString не отвечает на селектор longValue, но отвечает на longLongValue и intValue?

Является ли это предполагаемым поведением? Если да, то почему? Я не вижу логической причины для ответа на intValue и longLongValue, но не longValue.

я могу добавить категорию на NSString и добавить:

-(long)longValue{ 
    return (long)[self longLongValue]; 
} 

Это решает мою проблему. Но я до сих пор не понимаю, почему это не стандартная реализация.

+0

Я не могу придумать логическую причину, почему они этого не предоставили, и я предполагаю, что только некоторые бывшие инженеры NeXTSTEP знают причину. – trojanfoe

ответ

5

Edit 1:

Это должно ответить вам, почему мы не можем получить longValue от NSString Major 64-bit changes

Первый Ответ:

документация Apple, говорит о получении только следующие Числовые типы:

doubleValue 
floatValue 
intValue 
integerValue 
longLongValue 
boolValue 

Apple's doc on NSString

Так Вероятно, один из способов получить longValue из NSString типа, как вы делаете это.

Я не уверен, что вы получите ожидаемый результат, поскольку вы используете литье типа longValue.

Однако другой возможный способ получить longValue из NSString будет:

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; long number = [[numberFormatter numberFromString:string] longValue];

+0

Я проверил документацию после получения ошибки. Я уже знаю, что этого не существует. Мой вопрос: почему? –

+0

Это должно ответить на вопрос, почему .. [Основные 64-битные изменения] (https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaTouch64BitGuide/Major64-BitChanges/Major64-BitChanges.html) – Basanth

1

Если вы хотите 64-бит во всех процессорных архитектур, то вы хотите long long или int64_t, который удовлетворяются за :

[NSString longLongValue] 
+0

Я не помню, чтобы говорить, что мне нужны 32-битные целые числа. Мне нужно 64-бит на всех платформах. –

+0

@ CanPoyrazoğlu OK обновил мой ответ, однако неясно, чего вы хотите. В вашем вопросе вы заявляете, что хотите «длинный», 32-разрядный или 64-разрядный, в зависимости от архитектуры процессора, и теперь вы говорите, что хотите, чтобы 64-бит повсюду. – trojanfoe

+0

Я не думаю, что это о том, чего я хочу, но почему API Cocoa [Touch] несовместим. Я имею в виду, что если есть 'floatValue',' doubleValue', 'intValue',' longLongValue', я интуитивно и обычно ожидаю увидеть 'longValue' тоже. Я понимаю, что он * может * быть связан с согласованностью по битам на разных платформах, но это создает путаницу, ИМХО. –

Смежные вопросы