ios - Objective-C 中的 BOOL 循环

标签 ios objective-c for-loop boolean

像这样循环 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 位,但它不能有 01 之外的任何其他值。为什么 ?因为 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/

相关文章:

ios - 我怎么能得到iOS8.3中的一组表情符号

ios - 导航 Controller 循环

ios - UICollectionViewLayout layoutAttributesForElementsInRect 和 layoutAttributesForItemAtIndexPath

ios - 动态大小的 UILabel 紧跟 UIButton

c - 我的程序可以找到数字列表的最高移动平均值,但是当我通过 for 循环运行它时找不到它?

ios - 如何通过 UITableViewRowAction swift 使用 inputview

iphone - 今天的 NSTimeInterval,时间为零(午夜)

ios - 在 iCloud 中存储 >1MB 数组的最佳方式?

java - 如何让我的代码运行直到我输入数字

r - 汇总列值的组合