gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 03:27:07 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com