Я создаю NSNumber
из строки, проверяя, является ли строка float
или int
с использованием NSNumberFormatter
.Я хочу иметь метод, который возвращает тип NSNumber
и правильное значение.Он работает для int
, но не работает для десятичных чисел.
NSNumber *n;
enum CFNumberType _numberType;
- (instancetype)initWithString:(NSString *)string {
self = [super init];
if (self) {
NSNumberFormatter *formatter = [NSNumberFormatter new];
decimalPattern = @"\\d+(\\.\\d+)";
if ([Utils matchString:string withPattern:decimalPattern]) {
// Float
formatter.numberStyle = NSNumberFormatterDecimalStyle;
_numberType = kCFNumberDoubleType;
n = [formatter numberFromString:string];
} else {
// Integer
formatter.numberStyle = NSNumberFormatterNoStyle;
_numberType = kCFNumberIntType;
n = [formatter numberFromString:string];
}
self = [self initWithNumber:n];
}
return self;
}
- (CFNumberType)value {
CFNumberType num; // How to determine the type of num?
CFNumberGetValue((CFNumberRef)n, _numberType, &num);
return num;
}
- (CFNumberType)numberType {
return _numberType;
}
В методе value
, если я укажу float num
, он работает для плавающей запятой.Но я не могу использовать float, потому что хочу, чтобы он работал и для int.Как это сделать?