作为我的体贴(并且非常好看)的开发人员,我在分配CGFloat
/ float
值时始终使用double
,同样适用于{{1} }和NSInteger
处理NSUInteger
/ int
值时。不过,我曾经唠叨过一段时间的事情是,当我需要打开long
(或CGFloat
等等时,我不知道要请求哪种类型。 。)来自NSInteger
对象的值。
我可以发送NSNumber
或floatValue
消息来取回原始类型,但由于我使用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类型的最佳方法是什么?我是否想过这个?我错过了什么吗?或者我真的只是问一个好问题?
非常感谢任何帮助。谢谢你的阅读!