像这样循环 Objective-C BOOL 是否安全:
for (BOOL flagA = NO; flagA <= YES; flagA++)
for (BOOL flagB = NO; flagB <= flagA; flagB++)
// ...
我想用它来循环遍历 XCTestCase
中标志的所有相关排列。
但看起来 YES++
至少在某些平台上仍然是 YES
(因此导致无限循环,例如在 iPhone 6 Plus 模拟器上),而我本来期望BOOL
将被视为 int
(因此 YES++
变为 2
)。
我是否必须循环遍历int
(我最好的猜测),或者可以通过某种方便的方式挽救BOOL
的使用吗?
最佳答案
你们都没有捕获重点。 Drux 正在问为什么他不能在 BOOL 上递增,而它应该是一个完全可递增的 char(8 位值)。
答案很简单。 BOOL 有时是一个 char,有时是一个 bool
,具体取决于目标。来自 objc.h 文件:
#if !defined(OBJC_HIDE_64) && TARGET_OS_IPHONE && __LP64__
typedef bool BOOL;
#else
typedef signed char BOOL;
如果您迭代 bool
,您将获得最大值 1
的值。
编辑:
Can you please add a reference to where the semantics of ++ for bool are specified? - Drux
尽管 bool
必须至少为 8 位,但它不能有 0
或 1
之外的任何其他值。为什么 ?因为 bool a = 3
( boolean 等于运算符)将 3
转换为 bool
值,即 true
,即1
。
所以 bool a = true; a++
与 bool a = 2;
相同,这使得 a
的值为 1
关于ios - Objective-C 中的 BOOL 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28670421/