为float或double数据类型发送正确的NSNumber消息?

时间:2014-04-15 14:52:16

标签: objective-c macos nsnumber scalar cgfloat

作为我的体贴(并且非常好看)的开发人员,我在分配CGFloat / float值时始终使用double,同样适用于{{1} }和NSInteger处理NSUInteger / int值时。不过,我曾经唠叨过一段时间的事情是,当我需要打开long(或CGFloat等等时,我不知道要请求哪种类型。 。)来自NSInteger对象的值。

我可以发送NSNumberfloatValue消息来取回原始类型,但由于我使用doubleValue,我不确定我需要的实际类型。我一直在想办法解决这个问题,但我的想法看起来似乎很简单。

创意1:

CGFloat

创意2:

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

这些只是我头脑中的一些想法,但它们看起来都比我想象的要复杂得多。

那么从NSNumber *objectValue = @4.5; CGFloat scalarValue; if ( sizeof(CGFloat) == sizeof(float) ) { scalarValue = numberValue.floatValue; } else { scalarValue = numberValue.doubleValue; } 对象获取#define d类型的最佳方法是什么?我是否想过这个?我错过了什么吗?或者我真的只是问一个好问题?

非常感谢任何帮助。谢谢你的阅读!

0 个答案:

没有答案