【发布时间】:2012-06-21 08:31:43
【问题描述】:
我想比较 Objective-c 中的 2 个 BOOL 值。
我发现以下代码中的 (3)-(6) 有效。
(1)-(2) 不起作用,因为 BOOL 只是 signed char。
(3) 有效且可读性强,但我认为 bool 不是客观 c。
在objective-c代码中使用bool好不好?
在 Objective-c 中比较 2 个 BOOL 值的安全和好方法是什么?
还有其他更好的比较方法吗?
BOOL b = YES;
BOOL c = 2;
NSLog(@"(1) %d", b == c); // not work
NSLog(@"(2) %d", (BOOL)b == (BOOL)c); // not work
NSLog(@"(3) %d", (bool)b == (bool)c);
NSLog(@"(4) %d", !b == !c);
NSLog(@"(5) %d", !!b == !!c);
NSLog(@"(6) %d", (b != 0) == (c != 0));
结果:
(1) 0
(2) 0
(3) 1
(4) 1
(5) 1
(6) 1
【问题讨论】:
-
2不是有效的BOOL值;只有YES和NO是。你的做法是无效的。 -
第四种方法我觉得不错。它很短,可以安全地将值转换为 0 或 1。
-
@trojanfoe:问题是,Obj-C 很乐意接受将数字分配给 BOOL,你甚至可以对它进行按位运算。
-
我同意 trojanfoe,而且我认为 XCode 应该在此类分配的情况下生成警告。错误的 BOOL 分配是可怕错误的根源。
-
@NikolaiRuhe 当然,但是询问有关安全使用
BOOL的问题然后分配2是无效的。
标签: iphone objective-c boolean compare