像这样循环遍历 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
s(我的最佳猜测),还是可以通过某种方便的方式来挽救 BOOL
的使用?
你们都错过了这里的重点。 Drux 在问为什么他不能在 BOOL 上递增,而它应该是一个完全可递增的 char(8 位值)。
答案很简单。 BOOL 有时是一个字符,有时是一个 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
(bool 等号运算符)将 3
转换为 bool
值,即 true
即1
.
所以 bool a = true; a++
与 bool a = 2;
相同,这使得 a
的值为 1
关于ios - 在 Objective-C 中循环 BOOL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28670421/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |