我希望检查一个对象的类型,对于NSString:
[theObject isKindOfClass:[NSString class]]
它有效,但对于NSInteger
[theObject isKindOfClass:[NSInteger class]]
将报告错误
欢迎任何评论
答案 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