我如何判断我从-valueForKey返回的NSNumber:最初是int还是float?

Pro*_*ber 6 objective-c foundation

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

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

Tom*_*mmy 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
        */
   }
}
Run Code Online (Sandbox Code Playgroud)

编辑:更仔细地查看文档,CFNumberIsFloatType似乎完全符合您的要求而没有复杂性.所以:

if(CFNumberIsFloatType((CFNumberRef)number))
{
    NSLog(@"this was a float");
}
else
{
    NSLog(@"this was an int");
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的答案,但值得注意的是`NSNumber`方法[`objCType`](http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference .html#// apple_ref/doc/uid/20000178-DontLinkElementID_7)可能使用`CFNumberGetType()`.还要注意方法和函数都注意到它们返回的类型可能与初始化类型不完全匹配. (3认同)