123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- //
- // 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
- + (instancetype)cachedTypeWithCode:(NSString *)code
- {
- MJExtensionAssertParamNotNil2(code, nil);
-
- static NSMutableDictionary *types;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- types = [NSMutableDictionary dictionary];
- });
-
- 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
|