来自CGFloat的NSNumber

时间:2013-06-12 14:09:49

标签: objective-c floating-point nsnumber cgfloat

有没有一种安全的方法可以将CGFloat“转换”为NSNumber

NSNumber包含numberWithFloat:numberWithDouble:方法,但CGFloat被定义为floatdouble,具体取决于平台,似乎存在风险使用其中任何一个。

或者numberWithDouble:是否可以安全地使用CGFloat,因为它是更精确的一个?

2 个答案:

答案 0 :(得分:30)

我相信@ NSNumber字面意思已经足够

@(myCGFloat)

在此处阅读更多内容:http://clang.llvm.org/docs/ObjectiveCLiterals.html

答案 1 :(得分:21)

这就是我处理它的方式:

@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_DOUBLECGBase.h中有条件地通过平台定义。