CGFloat
をNSNumber
に「変換する」安全な方法はありますか?CGFloatからのNSNumber
NSNumber
がnumberWithFloat:
とnumberWithDouble:
メソッドを持っていますが、CGFloat
は、プラットフォームに依存しfloat
またはdouble
として定義されている、それらのいずれかを使用することは危険と思われます。
さらに精度が高いので、CGFloat
と一緒に使用しても安全ですか?numberWithDouble:
ですか?
@interface NSNumber (CGFloatAdditions)
+ (NSNumber*)numberWithCGFloat: (CGFloat)value;
- (CGFloat)CGFloatValue;
@end
@implementation NSNumber (CGFloatAdditions)
+ (NSNumber*)numberWithCGFloat: (CGFloat)value
{
#if CGFLOAT_IS_DOUBLE
return [NSNumber numberWithDouble: (double)value];
#else
return [NSNumber numberWithFloat: value];
#endif
}
- (CGFloat)CGFloatValue
{
#if CGFLOAT_IS_DOUBLE
return [self doubleValue];
#else
return [self floatValue];
#endif
}
@end
CGFLOAT_IS_DOUBLE
はプラットフォームによって条件付きCGBase.h
に定義されています。
あなたが十分に高いコンパイラのバージョンをお持ちの場合は、単に* * @(myNumber)を書いて、それがで解決されますコンパイル時。しかし、* [NSNumber numberWithDouble:myNumber] *を安全に呼び出すことができます。* CGFloat *が二重に定義されている場合、* CGFloat *は浮動小数点として定義されています。 –
安全?説明できますか? –
「精度の低下なし」として安全です。私はなぜ落選したのですか? –