New file |
| | |
| | | // |
| | | // NSNumber+YYAdd.m |
| | | // YYCategories <https://github.com/ibireme/YYCategories> |
| | | // |
| | | // 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 "YYCategoriesMacro.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], |
| | | @"<null>" : [NSNull null]}; |
| | | }); |
| | | NSNumber *num = dic[str]; |
| | | if (num) { |
| | | if (num == (id)[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 |