11

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

NSNumber具有numberWithFloat:andnumberWithDouble:方法,但CGFloat被定义为floatdouble取决于平台,使用其中任何一个似乎都有风险。

或者numberWithDouble:与 a 一起使用是安全的CGFloat,因为它是更精确的那个?

4

2 回答 2

32

我相信@ NSNumber文字就足够了

@(myCGFloat)

在这里阅读更多:http: //clang.llvm.org/docs/ObjectiveCLiterals.html

于 2013-06-12T14:22:01.960 回答
23

我是这样处理的:

@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由平台有条件地定义。

于 2013-06-12T14:17:29.760 回答