0

作为一个深思熟虑(而且非常漂亮)的开发人员,我总是CGFloat在分配float/double值时使用NSIntegerNSUInteger在处理int/long值时也是如此。CGFloat不过,一直困扰着我的一件事是,当我需要从对象中解包(或NSInteger等)值时,我不知道要请求哪种类型NSNumber

我可以发送 afloatValuedoubleValue消息来取回原始类型,但由于我使用的是CGFloat,我不确定我需要的实际类型。我一直在想办法解决这个问题,但我的想法似乎是对看似简单的事情的相当臃肿的解决方案。

想法1:

CGFloat myFloatOrDouble = 4.5;

// I generally use boxed expressions to create NSNumber objects, so I
// don't have to choose between -numberWithFloat: or -numberWithDouble:

NSNumber *objectValue = @(myFloatOrDouble);
CGFloat scalarValue;

#if __LP64__
    scalarValue = numberValue.doubleValue;
#else
    scalarValue = numberValue.floatValue;
#endif

想法2:

NSNumber *objectValue = @4.5;
CGFloat scalarValue;

if ( sizeof(CGFloat) == sizeof(float) ) { 
    scalarValue = numberValue.floatValue;
} else {
    scalarValue = numberValue.doubleValue;
}

这些只是我脑海中的一些想法,但它们似乎都比我想象的要复杂得多。

那么从对象中获取#defined 类型的最佳方法是什么?NSNumber这是我想太多了吗?我错过了什么吗?还是我实际上只是问了一个好问题?

任何帮助将非常感激。谢谢阅读!

4

0 回答 0