6

原因是我必须取回财产中的确切价值。所以如果它是一个浮点数,我想调用-floatValue。但如果它是一个 int,我想调用 -intValue。

NSNumber 是否记得它是如何初始化的?

4

1 回答 1

16

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");
}
于 2011-04-24T14:05:07.077 回答