YYKit源碼探究(六) —— NSString分類之NSNumber Compatible(五)

版本記錄

版本號 時間
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+YYAddRegular 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ù)類型,喜歡的給個贊~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末统扳,一起剝皮案震驚了整個濱河市喘帚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌咒钟,老刑警劉巖吹由,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異朱嘴,居然都是意外死亡溉知,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門腕够,熙熙樓的掌柜王于貴愁眉苦臉地迎上來级乍,“玉大人,你說我怎么就攤上這事帚湘∶等伲” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵大诸,是天一觀的道長捅厂。 經(jīng)常有香客問我,道長资柔,這世上最難降的妖魔是什么焙贷? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮贿堰,結(jié)果婚禮上辙芍,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好故硅,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布庶灿。 她就那樣靜靜地躺著,像睡著了一般吃衅。 火紅的嫁衣襯著肌膚如雪往踢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天徘层,我揣著相機與錄音峻呕,去河邊找鬼。 笑死趣效,一個胖子當(dāng)著我的面吹牛山上,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播英支,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼佩憾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了干花?” 一聲冷哼從身側(cè)響起妄帘,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎池凄,沒想到半個月后抡驼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡肿仑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年致盟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尤慰。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡馏锡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伟端,到底是詐尸還是另有隱情杯道,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布责蝠,位于F島的核電站党巾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏霜医。R本人自食惡果不足惜齿拂,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肴敛。 院中可真熱鬧署海,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昨登。三九已至趾代,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丰辣,已是汗流浹背撒强。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留笙什,地道東北人飘哨。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像琐凭,于是被迫代替她去往敵國和親芽隆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容