//
|
// MJPropertyType.m
|
// MJExtension
|
//
|
// Created by mj on 14-1-15.
|
// Copyright (c) 2014年 小码哥. All rights reserved.
|
//
|
|
#import "MJPropertyType.h"
|
#import "MJExtension.h"
|
#import "MJFoundation.h"
|
#import "MJExtensionConst.h"
|
|
@implementation MJPropertyType
|
|
static NSMutableDictionary *types_;
|
+ (void)initialize
|
{
|
types_ = [NSMutableDictionary dictionary];
|
}
|
|
+ (instancetype)cachedTypeWithCode:(NSString *)code
|
{
|
MJExtensionAssertParamNotNil2(code, nil);
|
|
MJPropertyType *type = types_[code];
|
if (type == nil) {
|
type = [[self alloc] init];
|
type.code = code;
|
types_[code] = type;
|
}
|
return type;
|
}
|
|
#pragma mark - 公共方法
|
- (void)setCode:(NSString *)code
|
{
|
_code = code;
|
|
MJExtensionAssertParamNotNil(code);
|
|
if ([code isEqualToString:MJPropertyTypeId]) {
|
_idType = YES;
|
} else if (code.length == 0) {
|
_KVCDisabled = YES;
|
} else if (code.length > 3 && [code hasPrefix:@"@\""]) {
|
// 去掉@"和",截取中间的类型名称
|
_code = [code substringWithRange:NSMakeRange(2, code.length - 3)];
|
_typeClass = NSClassFromString(_code);
|
_fromFoundation = [MJFoundation isClassFromFoundation:_typeClass];
|
_numberType = [_typeClass isSubclassOfClass:[NSNumber class]];
|
|
} else if ([code isEqualToString:MJPropertyTypeSEL] ||
|
[code isEqualToString:MJPropertyTypeIvar] ||
|
[code isEqualToString:MJPropertyTypeMethod]) {
|
_KVCDisabled = YES;
|
}
|
|
// 是否为数字类型
|
NSString *lowerCode = _code.lowercaseString;
|
NSArray *numberTypes = @[MJPropertyTypeInt, MJPropertyTypeShort, MJPropertyTypeBOOL1, MJPropertyTypeBOOL2, MJPropertyTypeFloat, MJPropertyTypeDouble, MJPropertyTypeLong, MJPropertyTypeLongLong, MJPropertyTypeChar];
|
if ([numberTypes containsObject:lowerCode]) {
|
_numberType = YES;
|
|
if ([lowerCode isEqualToString:MJPropertyTypeBOOL1]
|
|| [lowerCode isEqualToString:MJPropertyTypeBOOL2]) {
|
_boolType = YES;
|
}
|
}
|
}
|
@end
|