如何区分布尔NsNumber和实数?

时间:2013-11-07 17:58:59

标签: objective-c

我从类型为id的Objective C库(它的Firebase,但这并不重要)中获得了一个值。该文档声明该值将是布尔值和数值结果的NSNumber。我想根据此结果是否与布尔值相对应采取不同的操作。

我知道这是可能的,因为通过NSStringFromClass([value class]);打印出结果类会给布尔值提供“__NSCFBoolean”,但我不确定如何正确构建比较。

1 个答案:

答案 0 :(得分:4)

objCType方法提供有关数据类型的信息 数字对象:

NSNumber *n = @(1.3);
NSLog(@"%s", [n objCType]); // "d" for double
NSNumber *b = @YES;
NSLog(@"%s", [b objCType]); // "c" for char

可能的值记录在 "Type Encodings" 在“Objective-C运行时编程指南”中。

由于BOOL定义为unsigned char,因此通过此方法报告此情况。 这意味着您无法将其与包含任何NSNumber的{​​{1}}对象区分开来。 但是在“布尔”和“数字”之间进行检查就足够了:

char