その理由は、プロパティにあった正確な値を返さなければならないからです。したがって、float の場合は、-floatValue を呼び出します。しかし、それが int だった場合は、-intValue を呼び出したいと思います。
NSNumber はどのように初期化されたか覚えていますか?
その理由は、プロパティにあった正確な値を返さなければならないからです。したがって、float の場合は、-floatValue を呼び出します。しかし、それが int だった場合は、-intValue を呼び出したいと思います。
NSNumber はどのように初期化されたか覚えていますか?
NSNumber は、CFNumber とブリッジされたフリーダイヤルです (他のソースの中でも、CFNumber リファレンスの上部にあるテキストを参照してください)。したがって、CFNumberGetTypeを使用できます。例えば
- (void)logTypeOf:(NSNumber *)number
{
switch(CFNumberGetType((CFNumberRef)number))
{
case kCFNumberSInt8Type: NSLog(@"8bit signed integer"); break;
case kCFNumberSInt16Type: NSLog(@"16bit signed integer"); break;
case kCFNumberSInt32Type: NSLog(@"32bit signed integer"); break;
/* ... etc, for all of:
kCFNumberSInt64Type
kCFNumberFloat32Type
kCFNumberFloat64Type
kCFNumberCharType
kCFNumberShortType
kCFNumberIntType
kCFNumberLongType
kCFNumberLongLongType
kCFNumberFloatType
kCFNumberDoubleType
kCFNumberCFIndexType
kCFNumberNSIntegerType
kCFNumberCGFloatType
*/
}
}
編集:ドキュメントをより徹底的に見ると、CFNumberIsFloatTypeは、複雑さなしに、まさにあなたが望むことを行うように見えます。そう:
if(CFNumberIsFloatType((CFNumberRef)number))
{
NSLog(@"this was a float");
}
else
{
NSLog(@"this was an int");
}