次のメソッドを使用して、NSString を NSNumber に解析しています。
// (a category method on NSString)
-(NSNumber*) tryParseAsNumber {
NSNumberFormatter* formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
return [formatter numberFromString:self];
}
そして、これが正しく機能していることを確認するテストを行いました:
test(@"".tryParseAsNumber == nil);
...
test([(@NSUIntegerMax).description.tryParseAsNumber isEqual:@NSUIntegerMax]);
...
iPhone 6 でのテストに切り替えたときに、最大値テストが失敗し始めました。これは、おそらく NSUInteger が 32 ビットではなく 64 ビットになったためです。フォーマッタによって返される値は1.844674407370955e+19
、 uint64_t ではなくdouble になりまし18446744073709551615
た。
すべての int64 および unsigned int64 に対して正確に成功する組み込みメソッドはありますか、それとも自分で実装する必要がありますか?