检查对象是否为NSInteger

时间:2011-08-24 04:09:03

标签: iphone objective-c cocoa-touch cocoa

我希望检查一个对象的类型,对于NSString:

[theObject isKindOfClass:[NSString class]]

它有效,但对于NSInteger

[theObject isKindOfClass:[NSInteger class]]

将报告错误

欢迎任何评论

4 个答案:

答案 0 :(得分:52)

使用NSNumber类:

if ([obj isKindOfClass:[NSNumber class]]) { ... }

NSNumber 从NSValue继承:NSObject

<强> NSInteger的 用于描述整数。

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif

答案 1 :(得分:11)

NSInteger不是Objective-C类。它是整数类型的typedef。因此,对象永远不会成为NSInteger。

您正在寻找的是NSNumber类,它是一个Objective-C类。

答案 2 :(得分:6)

NSInteger不是对象类型。它是基础数据类型。结帐Foundation Data Types Reference以查看其定义方式。

答案 3 :(得分:0)

//checked
+ (BOOL)CGFloatIsCanNSInteger:(CGFloat)floatValue inAccuracy:(NSString*)accuracy {
    NSString *strFloat = [NSString stringWithFormat:accuracy, floatValue];
    NSRange dotRange = [strFloat rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:@"."]];
    NSUInteger dotLocation = dotRange.location + 1;
    NSString *subStrFromDot = [strFloat substringFromIndex:dotLocation];
    NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"123456789"];
    for (int i = 0; i < [subStrFromDot length]; i++) {
        unichar c = [subStrFromDot characterAtIndex:i];
        if ([myCharSet characterIsMember:c]) {
            return NO;
        }
    }
    return YES;
}
//checked