MJExtension底層實現原理簡單剖析
阿新 • • 發佈:2018-12-22
- (instancetype)initWithTypeString:(NSString *)string
{
if (self = [super init])
{
NSUInteger loc = 1;
NSUInteger len = [string rangeOfString:@","].location - loc;
NSString *typeCode = [string substringWithRange:NSMakeRange(loc, len)];
[self getTypeCode:typeCode];
NSLog (@"%@",typeCode);
}
return self;
}
- (void)getTypeCode:(NSString *)code
{
if ([code isEqualToString:MJPropertyTypeId]) {
_idType = YES;
} else if (code.length > 3 && [code hasPrefix:@"@\""]) {
// 去掉@"和",擷取中間的型別名稱
_code = [code substringWithRange:NSMakeRange (2, code.length - 3)];
_typeClass = NSClassFromString(_code);
_numberType = (_typeClass == [NSNumber class] || [_typeClass isSubclassOfClass:[NSNumber class]]);
}
// 是否為數字型別
NSString *lowerCode = _code.lowercaseString;
NSArray *numberTypes = @[MJPropertyTypeInt, MJPropertyTypeShort, MJPropertyTypeBOOL1, MJPropertyTypeBOOL2, MJPropertyTypeFloat, MJPropertyTypeDouble, MJPropertyTypeLong, MJPropertyTypeChar];
if ([numberTypes containsObject:lowerCode]) {
_numberType = YES;
if ([lowerCode isEqualToString:MJPropertyTypeBOOL1]
|| [lowerCode isEqualToString:MJPropertyTypeBOOL2]) {
_boolType = YES;
}
}
}