如果 BOOL 有一个漂亮的短名称,那么写起来就很容易了:
myBOOL = !myBOOL;
但是如果 BOOL 的名称很长怎么办?
objectWithLongishName.memberWithLongishName.submember.myBOOL = !(objectWithLongishName.memberWithLongishName.submember.myBOOL);
. . .看起来不太漂亮。
我想知道是否有一种无需输入两次名称即可切换 BOOL 的简单方法?
最佳答案
还有一个:
MyBooleanYaddaYadda ^= YES;
这有点脆弱——它会破坏遗留的 C 代码,这意味着任何非零整数的计算结果都为真。但话又说回来,Apple 框架代码也是如此——我在 Cocoa 中遇到过这样的情况,当一个非零、非一的整数作为 BOOL 传递时,不会产生与传递 YES 相同的效果。
但是,它不依赖于 YES 的位模式 - 仅依赖于 NO 为 0。考虑到 C 将整数解释为逻辑值的方式,这几乎是给定的。此外,它不假定 BOOL 的实际数据类型(顺便说一句,在 Cocoa 上它是 signed char
)。
YES 在 Cocoa 上的位模式是 1。但这不是通用约定。在一些没有内置 boolean 数据类型的平台上,用作逻辑 TRUE 的整数常量是 -1
- 全为 1 位。如果解释为无符号,则为 0xFFFFFFFF。这种编码有一个模糊的优势,即 bitwize NOT(C 中的 ~ 运算符)等同于逻辑 NOT(C 中的 ! 运算符)。也就是说,~0xFFFFFFFF 是 0,我。 e. ~TRUE 是 FALSE。如果 TRUE 定义为 1,则不会那样工作。
关于objective-c - Cocoa——切换一个 BOOL 而不重复它的名字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3313281/