iOS获取NSNumber的原始类型(*BOOL)

需求:

将NSDictionary中的bool类型用字符串"true" | "false" 的形式表示

众所周知, 当bool类型被转成NSNumber的时候会以01的形式存储, 所以在不知道类型的情况下, 是无法分辨到底是数字类型还是bool类型的

  • 判断bool类型, 为NSNumber写以下扩展来输出结果
#import "NSNumber+Helper.h"

@implementation NSNumber (Helper)

- (bool)isBool {
    return [self isKindOfClass:NSClassFromString(@"__NSCFBoolean")];
}

- (NSString *)toString {
    if ([self isBool]) {
        return [self boolValue] ? @"true": @"false";
    }
    return [NSString stringWithFormat:@"%@",self];
}

以上我的需求就OK了


  • 如果还想要判断其中数字类型int等可使用以下代码
- (int)numberOriginType:(NSNumber *)number {
    int type = -1;
    if (strcmp([number objCType], @encode(int)) == 0) {
        type = 1;
    } else if (strcmp([number objCType], @encode(double)) == 0) {
        type = 2;
    } else if (strcmp([number objCType], @encode(float)) == 0) {
        type = 3;
    } else if (strcmp([number objCType], @encode(long)) == 0) {
        type = 4;
    }
    return type;
}

你可能感兴趣的:(iOS获取NSNumber的原始类型(*BOOL))