版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2018.03.20 |
前言
iOS圈內(nèi)有幾個人大家基本都知道蔫劣,比如說王巍呻粹、唐巧谤逼,還有YYKit框架的作者現(xiàn)任職于滴滴的郭曜源 - ibireme等。這里有一篇唐巧對他的專訪菊霜,還有他的 GitHub - Yaoyuan 和 博客,這里貼出來框架YYKit 框架济赎。接下來幾篇我們就一起來看一下這個框架鉴逞。感興趣的可以看上面寫的幾篇。
1. YYKit源碼探究(一) —— 基本概覽
2. YYKit源碼探究(二) —— NSString分類之Hash(一)
3. YYKit源碼探究(三) —— NSString分類之Encode and decode(二)
4. YYKit源碼探究(四) —— NSString分類之Drawing(三)
5. YYKit源碼探究(五) —— NSString分類之Regular Expression(四)
回顧
上一篇我們分析了NSString
分類NSString+YYAdd
的Regular Expression
部分司训,這一篇我們就看一下NSNumber Compatible
部分构捡。
API 接口
// Now you can use NSString as a NSNumber.
@property (readonly) char charValue;
@property (readonly) unsigned char unsignedCharValue;
@property (readonly) short shortValue;
@property (readonly) unsigned short unsignedShortValue;
@property (readonly) unsigned int unsignedIntValue;
@property (readonly) long longValue;
@property (readonly) unsigned long unsignedLongValue;
@property (readonly) unsigned long long unsignedLongLongValue;
@property (readonly) NSUInteger unsignedIntegerValue;
示例調(diào)用
下面我們看一下方法的示例調(diào)用。
NSString *str = @"1234567890";
long value = [str longValue];
NSLog(@"值為 = %ld", value);
下面看一下輸出結(jié)果
2018-03-19 12:21:56.577709+0800 JJWebImage[29164:4134580] 值為 = 1234567890
方法實現(xiàn)
下面我們就看一下方法實現(xiàn)
- (char)charValue {
return self.numberValue.charValue;
}
- (unsigned char) unsignedCharValue {
return self.numberValue.unsignedCharValue;
}
- (short) shortValue {
return self.numberValue.shortValue;
}
- (unsigned short) unsignedShortValue {
return self.numberValue.unsignedShortValue;
}
- (unsigned int) unsignedIntValue {
return self.numberValue.unsignedIntValue;
}
- (long) longValue {
return self.numberValue.longValue;
}
- (unsigned long) unsignedLongValue {
return self.numberValue.unsignedLongValue;
}
- (unsigned long long) unsignedLongLongValue {
return self.numberValue.unsignedLongLongValue;
}
- (NSUInteger) unsignedIntegerValue {
return self.numberValue.unsignedIntegerValue;
}
- (NSNumber *)numberValue {
return [NSNumber numberWithString:self];
}
下面就是進入NSNumber的分類進行了處理壳猜。
+ (NSNumber *)numberWithString:(NSString *)string {
NSString *str = [[string stringByTrim] lowercaseString];
if (!str || !str.length) {
return nil;
}
static NSDictionary *dic;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
dic = @{@"true" : @(YES),
@"yes" : @(YES),
@"false" : @(NO),
@"no" : @(NO),
@"nil" : [NSNull null],
@"null" : [NSNull null],
@"<null>" : [NSNull null]};
});
id num = dic[str];
if (num) {
if (num == [NSNull null]) return nil;
return num;
}
// hex number
int sign = 0;
if ([str hasPrefix:@"0x"]) sign = 1;
else if ([str hasPrefix:@"-0x"]) sign = -1;
if (sign != 0) {
NSScanner *scan = [NSScanner scannerWithString:str];
unsigned num = -1;
BOOL suc = [scan scanHexInt:&num];
if (suc)
return [NSNumber numberWithLong:((long)num * sign)];
else
return nil;
}
// normal number
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
return [formatter numberFromString:string];
}
后記
本篇我們分析了NSNumber Compatible部分的功能勾徽,主要就是兼容NSNumber數(shù)據(jù)類型,喜歡的給個贊~~~