2010-08-13 2 views
15

В Objective C, как я могу проверить, если строка/NSNumber целое или ИНТObjective C: Проверьте, если число/INT/номер

+0

Пожалуйста, объясните более подробно что ты имеешь в виду. Оба NSString и NSNumber могут быть преобразованы в int или NSInteger, но ни один из них не является * int или NSInteger. – Chuck

+0

Хорошо, извините, мне нужно знать, является ли String или Int int/integer. См. Раздел «Деление числа на другой номер», но число, которое пользователь ставит, может не быть int. мне нужно проверить, если его номер int – Daniel

ответ

12

Вы можете использовать метод intValue на NSString:

NSString *myString = @"123"; 
[myString intValue]; // returns (int)123 

Для этого есть документация Apple - он вернет 0, если это недопустимое целое число: http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/instm/NSString/intValue

Надеюсь, что это поможет!

+0

Как я могу найти, является ли переменная строкой? – Daniel

+0

Как и в случае, вы хотите проверить и посмотреть, является ли какой-то пользовательский ввод простой простой строкой или числом? Как я уже сказал выше, intValue возвращает 0, когда NSString не является допустимым целым числом.Скажем, вы получаете информацию из UITextView - [[myTextView text] intValue] вернет действительный int, если это возможно, или 0, если он не может быть проверен как int. – codykrieger

+0

Хорошо, что проблема есть. Иногда пользователь не вводит никакого ввода. потому что это не требуется. И так как я использую массив и захватываю объект из него. Я получаю *** - [NSCFArray objectAtIndex:]: index (3) за пределами границ (3) мне нужно проверить, действительно ли массив действителен? – Daniel

2

Чтобы проверить, если NSNumber если целочисленное попробовать:

const char *t = [(NSNumber *)value objCType]; 
if (strcmp("i", t) == 0); // YES if integer 
33

Если вы пытаетесь определить, есть ли или нет NSString числовое значение или нет, попробуйте использовать NSNumberFormatter.

-(BOOL) stringIsNumeric:(NSString *) str { 
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
    NSNumber *number = [formatter numberFromString:str]; 
    [formatter release]; 
    return !!number; // If the string is not numeric, number will be nil 
} 
+4

Я думал, что я был единственным, кто сделал !! взломать принуждение к логическому. Ницца! –

+3

Этот вопрос лучше, чем [одобренный ответ] (http://stackoverflow.com/a/3473806/377384), потому что он дает вам истинный/ложный результат. Утвержденный ответ нет. –

+2

Это лучше, потому что принятый ответ не работает должным образом, если вы проверите строку с буквами, начинающимися с номера. Пример «1234asdf» вернет 1234, а не 0, это возвращает NO. И «000» вернет 0, и вы можете подумать, что это неправильно, но это не – jcesarmobile

0

Вы можете конечно сначала определить, является ли его в NSString или NSNumber с помощью

[Объект isKindOfClass: [NSString класс]] и т.д. ...

- boolValue - charValue - decimalValue - doubleValue - floatValue - intValue - integerValue - longLongValue - longValue - shortValue - unsignedCharValue - unsignedIntegerValue - unsignedIntValue - unsignedLongLongValue - unsignedLongValue - unsignedShortValue

все методы NSNumber, чтобы получить свои ценности. NSString получил несколько подобных.

3

Я положил это в свою категорию NSString (Util).

- (BOOL) isInt { 
    if ([self isEqualToString:@"0"]) 
     return YES; 
    return (self.intValue != 0); 
} 
2

Для NSString, если вы используете intValue/integerValue, есть определенные случаи, которые не обрабатываются, как он принимает во внимание только начало строки.

Например @ "bl3h" не считается целым числом, но @ "3h", дал выход 3

Мое решение для NSString:

Использование:

NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString:strName]; 

NSCharacterSet *numSet = [NSCharacterSet decimalDigitCharacterSet]; 

if([numSet isSupersetOfSet: charSet]) 
{ 
    // It is an integer (or it contains only digits) 
} 
Смежные вопросы