// // NSNumber+YYAdd.m // YYKit // // Created by ibireme on 13/8/24. // Copyright (c) 2015 ibireme. // // This source code is licensed under the MIT-style license found in the // LICENSE file in the root directory of this source tree. // #import "NSNumber+YYAdd.h" #import "NSString+YYAdd.h" #import "YYKitMacro.h" YYSYNTH_DUMMY_CLASS(NSNumber_YYAdd) @implementation NSNumber (YYAdd) + (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], @"" : [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]; } @end