我有一个方法,我在其中传递参数的可变列表。我对字符串等执行 isKindOfClass
。但是,如何确定 ivar 是否为 BOOL?
最佳答案
不,不是在运行时。 BOOL 是原始类型,而不是类。实际上 BOOL 是一个有符号的字符。
typedef signed char BOOL;
// BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C"
// even if -funsigned-char is used.
#define OBJC_BOOL_DEFINED
#define YES (BOOL)1
#define NO (BOOL)0
作为解决方法,您可以将 BOOL 包装在 NSNumber 中,以从中创建 Obj-C 对象。然后你可以做运行时检查:
NSNumber * n = [NSNumber numberWithBool:YES]; // @(YES) in Xcode 4.4 and above
if (strcmp([n objCType], @encode(BOOL)) == 0) {
NSLog(@"this is a bool");
} else if (strcmp([n objCType], @encode(int)) == 0) {
NSLog(@"this is an int");
}
编辑:此代码可能不适用于 BOOL,因为它在内部被编码为 char。请参阅此答案以获取替代解决方案:https://stackoverflow.com/a/7748117/550177
关于iphone - 判断ivar是否为BOOL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11719589/