我从一个类型为id
. 文档声明该值将是布尔和数字结果的 NSNumber。我想根据此结果是否对应于布尔值采取不同的操作。
我知道这是可能的,因为通过为布尔值打印出结果的类NSStringFromClass([value class]);
为“__NSCFBoolean”,但我不确定如何正确构建比较。
我从一个类型为id
. 文档声明该值将是布尔和数字结果的 NSNumber。我想根据此结果是否对应于布尔值采取不同的操作。
我知道这是可能的,因为通过为布尔值打印出结果的类NSStringFromClass([value class]);
为“__NSCFBoolean”,但我不确定如何正确构建比较。
该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 {
// ...
}