0

我从一个类型为id. 文档声明该值将是布尔和数字结果的 NSNumber。我想根据此结果是否对应于布尔值采取不同的操作。

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

4

1 回答 1

4

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

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

可能的值记录在 “Objective-C 运行时编程指南”中的“类型编码”中。

由于BOOL定义为unsigned char,因此通过此方法报告。这意味着您无法将它与NSNumber包含任何char. 但检查“布尔”和“数字”就足够了:

if (strcmp([obj objCType], @encode(BOOL)) == 0) {
    // ...
} else if (strcmp([obj objCType], @encode(double)) == 0) {
    // ...
} else {
    // ...
}
于 2013-11-07T18:20:05.920 回答