You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.7 KiB
63 lines
1.7 KiB
// |
|
// NSNumber+YYAdd.m |
|
// YYKit <https://github.com/ibireme/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], |
|
@"<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
|
|
|