ios - 为什么非零数字无法将 BOOL 属性设置为 YES?

标签 ios objective-c bitmask

据我了解,在基于 C 的 Objective C 中,所有 BOOL 基本上都是短路(-127 到 128),零是“FALSE”或“NO”的唯一值。但是,当我最近尝试根据位掩码设置按钮的选定值时,它失败了。为什么?

NSInteger bitfield = 127;
NSInteger bitmask = 1 << 6; // 64

myButton.selected = bitfield & bitmask; // selected will remain NO

最佳答案

那是因为 BOOL不是 bool .
BOOL只是(非 bool )整数类型的非标准(Objective-C-specific)typedef(据我所知,它总是 signed char 但我可能错了)。因此,它确实 不是 表现为真正的 bool 数据类型,而是作为其基础整数类型。所以,如果你分配 64对它来说,它将存储 64 (而不是 true1 )。因此,一个操作可能总是假设 true值为 1(即 LSB 集)将无法识别 64。

相反,如果您替换了 BOOL具有真正的 C99 bool 类型,即 _Boolbool ,那么您将体验到预期的行为。即,分配 任何非零值到变量会让它存储true1 ,无论该值是否真的为 1。

关于ios - 为什么非零数字无法将 BOOL 属性设置为 YES?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20168637/

相关文章:

ios - 如何以编程方式移动绘图空间?

ios - 后退按钮在 UINavigationController 中奇怪地消失但继续工作

c - 在 C 中创建/解压缩大位域的有效方法?

ios - ImageTransfer 在 iPhone 上使用蓝牙

iphone - 加载在 Storyboard内创建的 View Controller 作为另一个 View Controller 的 subview (进入屏幕的一部分)

c - 创建某些位掩码的步骤?

algorithm - 位掩码动态规划中的重叠子问题

ios - 语音激活

ios - 如何在 swift 4 中将 html 字符串设置为标签时设置常规字体和粗体字体的自定义字体?

iOS - 当我点击它输入文本时,SearchBar 跳到顶部