2011-08-24 42 views
24

tôi hy vọng sẽ kiểm tra kiểu của một đối tượng, cho NSString:Kiểm tra nếu một đối tượng là NSInteger

[theObject isKindOfClass:[NSString class]] 

nó hoạt động, nhưng đối với NSInteger

[theObject isKindOfClass:[NSInteger class]] 

sẽ báo cáo lỗi

Chào mừng bất kỳ nhận xét nào

Trả lời

51

Sử dụng lớp NSNumber:

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

NSNumber Inherits từ NSValue: NSObject

NSInteger Được sử dụng để mô tả một số nguyên.

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

NSInteger không phải là lớp Objective-C. Đó là một typedef cho một loại tích phân. Như vậy, một đối tượng sẽ không bao giờ trở thành NSInteger.

Điều bạn đang tìm kiếm là lớp học NSNumber, là lớp Objective-C.

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 
+0

Bạn nên sử dụng thẻ mã để định dạng chính xác :) – bkbeachlabs

Các vấn đề liên quan