Ответ 1
Я считаю, что @
NSNumber
литерал достаточно хорош
@(myCGFloat)
Подробнее здесь: http://clang.llvm.org/docs/ObjectiveCLiterals.html
Есть ли безопасный способ "преобразовать" CGFloat
в NSNumber
?
NSNumber
имеет методы numberWithFloat:
и numberWithDouble:
, но CGFloat
определяется как float
или double
в зависимости от платформы, представляется рискованным использовать любой из них.
Или numberWithDouble:
безопасен для использования с CGFloat
, так как он с большей точностью?
Я считаю, что @
NSNumber
литерал достаточно хорош
@(myCGFloat)
Подробнее здесь: http://clang.llvm.org/docs/ObjectiveCLiterals.html
Вот как я справился с этим:
@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
.