iphone - 判断ivar是否为BOOL

标签 iphone objective-c ios

我有一个方法,我在其中传递参数的可变列表。我对字符串等执行 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/

相关文章:

objective-c - 为 XCODE 项目生成 Apple Docs

ios - SwiftySound 在 Swift 中不起作用

iphone - 图像旋转不正确

c# - Azure 媒体播放器无法在 iPhone 上使用 AES 保护

ios - 使用 CoreGraphics 创建多页 PDF 文件在控制台上显示错误

ios - 具有本地化字符串的核心数据排序描述符

android - 在网络服务器上存储 Gmail 电子邮件 : Acceptable or privacy issue?

iphone - Windows Phone 以编程方式连接两个设备并镜像屏幕

ios - 如何卡住 View 直到某个值为真?

objective-c - UIView retainCount为0,但内存没有释放