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.
64 lines
1.7 KiB
64 lines
1.7 KiB
![]()
2 years ago
|
//
|
||
|
// 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
|