objective-c - << 在 UITableView 枚举中

标签 objective-c uitableview enums bitwise-operators

UITableViewCell 中使用 << 运算符,如下所示:

enum {
     UITableViewCellStateDefaultMask                     = 0,
     UITableViewCellStateShowingEditControlMask          = 1 << 0,
     UITableViewCellStateShowingDeleteConfirmationMask   = 1 << 1
};

我去过这篇文章<< operator in objective c enum?但仍然不清楚 << 运算符的使用。

同样是上面提到的Enum,写法如下,那为什么会这样呢,他们都用了<<操作符?

enum {
     UITableViewCellStateDefaultMask                     = 0,
     UITableViewCellStateShowingEditControlMask          = 1,
     UITableViewCellStateShowingDeleteConfirmationMask   = 2
};

最佳答案

您链接的帖子非常清楚地解释了原因。 << C 中的运算符将数字左移指定的位数。通过将 1 移入每一列,很容易看出枚举选项可以按位或运算在一起。这允许使用 | 将枚举选项组合在一起。运算符并保​​存在单个整数中。如果枚举声明如下所示,则这将不起作用:

enum {
     UITableViewCellStateDefaultMask                     = 0, (= 00 in binary)
     UITableViewCellStateShowingEditControlMask          = 1, (= 01 in binary)
     UITableViewCellStateShowingDeleteConfirmationMask   = 2, (= 10 in binary)
     UITableViewCellStateThatIJustMadeUpForThisExample   = 3  (= 11 in binary)
};

由于二进制中的 3 = 11,不可能从单个整数知道状态是否为 UITableViewCellStateThatIJustMadeUpForThisExampleUITableViewCellStateShowingEditControlMaskUITableViewCellStateShowingDeleteConfirmationMask 进行或运算.

关于objective-c - << 在 UITableView 枚举中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9852243/

相关文章:

ios - 当应用程序因 SIGSEGV 崩溃时执行最后一次 TFLog

iphone - 在 iphone 中如何获取 Sqlite 最后插入的行 ID?

ios - 如何以编程方式检查 iOS 应用程序中是否存在键盘?

ios - [UITableView _endCellAnimationsWithContext :],/BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3512.60.7/UITableView.m:1716

java - 强制子类声明枚举

ios - 如何判断一个类或者一个对象是不是单例?

ios - Swift:TitleForHeaderInSection 执行时出现问题

ios - 为什么表格 View 的大小与 iPhone X~iPhone XS Max 不同?

c++ - 将单个字节从 Enum 附加到 NSMutableData

java - java自动机的简单枚举