objective-c - Cocoa——切换一个 BOOL 而不重复它的名字

标签 objective-c cocoa boolean

如果 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/

相关文章:

objective-c - 在NSView中绘制波形

ios - 如何使用 URL 方案启动 iOS 时钟应用程序?

cocoa - NSXMLParserUndeclaredEntityError 是什么意思?

python - 将 boolean 公式映射到 Python 集合表达式

ruby-on-rails - Ruby on Rails - 复选框未保存到数据库?

iphone - UIButton 标题上方的中心图像

iphone - 在以下示例中如何从 NSSArray 元素获取值?

objective-c - 将 CALayer 子层压平为一层

iphone - 如何在像 obj-c 的 Map 方法这样的 ruby​​ 中迭代时跳过对象

c# - 试图理解这个 : bool variables are value types in C#