web-dev-qa-db-ja.com

Objective c:整数/整数/数値かどうかを確認します

Objective Cで、string/NSNumberが整数かintかを確認するにはどうすればよいですか。

16
Daniel

NSStringでintValueメソッドを使用できます。

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

お役に立てば幸いです。

12
codykrieger

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
}
38
Anshu Chimala

これを自分のカテゴリNSString (Util)に入れました。

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

整数の場合にNSNumberかどうかを確認するには、次のようにします。

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

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)
}
2
if( [(NSString *)someString intValue] )
{ /* Contains an int fosho! */ }

if( [(NSNumber *)someNumber intValue] )
{ /* Contains an int wich is not 0.... :D */ }

もちろん、最初にNSStringかNSNumberかを判断するには、

[オブジェクトisKindOfClass:[NSStringクラス]]など...

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

値を取得するためのNSNumberのすべてのメソッドです。 NSStringはいくつかの同様のものを取得しました。

0