【发布时间】:2011-08-24 04:09:02
【问题描述】:
我希望检查对象的类型,对于 NSString:
[theObject isKindOfClass:[NSString class]]
它可以工作,但是对于 NSInteger
[theObject isKindOfClass:[NSInteger class]]
会报错
欢迎评论
【问题讨论】:
标签: iphone objective-c cocoa-touch cocoa
我希望检查对象的类型,对于 NSString:
[theObject isKindOfClass:[NSString class]]
它可以工作,但是对于 NSInteger
[theObject isKindOfClass:[NSInteger class]]
会报错
欢迎评论
【问题讨论】:
标签: iphone objective-c cocoa-touch cocoa
使用 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
【讨论】:
NSInteger 不是 Objective-C 类。它是整数类型的 typedef。因此,对象永远不会是 NSInteger。
您正在寻找的是 NSNumber 类,它是一个 Objective-C 类。
【讨论】:
NSInteger 不是对象类型。它是一种基础数据类型。结帐Foundation Data Types Reference 看看它是如何定义的。
【讨论】:
//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
【讨论】: