据我了解,在基于 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 (而不是 true
或 1
)。因此,一个操作可能总是假设 true
值为 1(即 LSB 集)将无法识别 64。
相反,如果您替换了 BOOL
具有真正的 C99 bool 类型,即 _Bool
或 bool
,那么您将体验到预期的行为。即,分配 任何非零值到变量会让它存储true
或 1
,无论该值是否真的为 1。
关于ios - 为什么非零数字无法将 BOOL 属性设置为 YES?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20168637/